Изменение тона изображения
Для изменения тона будет использоваться цветовую модель HSL, в которой координатами цвета являются Hue (Тон), Saturation (Насыщенность) и Lightness (Светлота).Цветовые составляющие HSL принимают следующие значения:
- H (Тон) — [0; 360]
- S (Насыщенность) — [0; 1]
- L (Светлота) — [0; 1]
На рисунке 1 показано графическое представление модели HSL:
Рисунок 1. Графическое представление модели HSL.
Для того, чтобы можно было изменять тон, нам нужно будет конвертировать цветовую модель RGB в HSL и обратно.
Напишем две функции:
1. RGB -> HSL
Код:
|
2. HSL -> RGB
Код:
|
Структуры RGB_Color и HSL_Color:
Код:
|
Когда всё необходимое для написания функции корректировки тона готово, можем браться за дело.
Напишем функцию тона:
Код:
|
Здесь мы опять использовали класс Filter, написанный нами в 1-ом уроке и неуправляемые указатели, так как это наилучший способ добиться максимальной производительности в .NET!
Использование тона в приложениях:
Код:
|
Рисунок 2. Изображение до изменения тона.
Рисунок 2. Изображение после изменения тона (тон = 280).
Изменение гаммы изображения
Повышение гаммы позволяет более отчетливо увидеть темные участки изображения.Для коррекции гаммы сначала вычисляется таблица значений (RampTable). Таблица состоит из 255 ячеек.
Далее в зависимости от значений R, G, Bберутся данные из таблицы и присваиваются пикселю. Значения гаммы находятся в промежутке от 0.0 до 5.0.
Создадим класс Gamma и добавим в него массив байтов (RampTable):
Код:
|
Теперь в него необходимо добавить функцию генерации таблицы:
Код:
|
Затем необходимо добавить главную функцию ProcessImage:
Код:
|
Готово.
Использование гаммы в приложениях:
Код:
|
Рисунок 3. Изображение до изменения гаммы.
Рисунок 3. Изображение после повышения значения гаммы.