Фильтр «негатив»
Негатив – это фильтр, который инвертирует цвета. Приступим к написанию кода. Сначала создадим основу для всех наших фильтров. Создадим новый класс с именем Filter и впишем в него следующие свойства:- Picture – возвращает изображение.
- Height – возвращает высоту изображения.
- Width – возвращает ширину изображения.
- BytesPerPixel – возвращает количество байт на пиксель.
- Safe_IMG_Scan0 – возвращает управляемый указатель (IntPtr) на массив пикселей.
- Unsafe_IMG_Scan0 – возвращает неуправляемый указатель (*byte) на массив пикселей.
- AllPixelsBytes – возвращает количество байт, занимаемое всеми пикселями.
- Unlock – разблокирует массив пикселей.
- GetPixel – возвращает структуру RGB_Color со значениями цветов.
- SetPixel – присваивает пикселю с координатами X,Y цвет, который задан в структуре RGB_Color.
Код:
|
Реализация класса Filter:
Код:
|
Теперь начнём реализовывать негатив, используя класс Filter.
Создадим новый класс с названием Negative:
Код:
|
Добавим функцию ProcessImage:
Код:
|
В этой функции мы использовали неуправляемые указатели, так как это самый лучший способ добиться максимального быстрого действия в C#. В реализации нет ничего сложного, думаю, что комментарии излишни.
Использование в приложениях фильтра «негатив»:
Код:
|
Рисунок 1. Фильтр «негатив».
Фильтр «сепия»
Сепия – это оттенок коричневого цвета, который появляется на старых черно-белых фотографиях.Сразу перейдём к её созданию. Здесь мы снова будем использовать класс Filter и неуправляемые указатели.
Создадим класс Sepia:
Код:
|
И добавим в него функцию ProcessImage:
Код:
|
Использование в приложениях фильтра «сепия»:
Код:
|
Рисунок 2. Фильтр «сепия».