Что такое HSV
Цветовая модель HSV (от англ. Нue, Saturation, Value - тон, насыщенность, величина), в отличие от модели RGB, более ориентирована на человека и его интуитивные представления об ощущении цвета.
Если представить эту модель в цилиндрической системе координат в трехмерном евклидовом пространстве, то если
- H - угол в горизонтальной плоскости от оси Ox,
- S - радиус в горизонтальной плоскости (расстояние до оси Oz) и
- V - высота (по оси Oz),
Данная модель похожа на художника, который смешивает цвета. Вершины основания пирамиды соответствуют чистым основным цветам (красному, желтому, зеленому, цвету морской волны, синему и фиолетовому). При их смешивании друг с другом в разных пропорциях (в пространстве это будут линейные комбинации соответствующих векторов) точка, соответствующая цвету, перемещается по основанию пирамиды. Смешивая противоположные цвета (например, желтый и синий), можно получить белый. Добавляя к какому-либо чистому цвету черный, мы будем спускаться по пирамиде, получая различные оттенки, при этом диапазон S будет уменьшаться вплоть до нуля. На оси S = 0 (оттенки серого) значение H не определено.
Как перевести RGB в HSV в paint.net
Обычно цвета при создании эффектов paint.net доступны в модели RGB. Доступ к параметрам осуществляется при помощи атрибутов
- CurrentPixel.R,
- CurrentPixel.G и
- CurrentPixel.B.
Код: Выделить всё
// Convert to a standard color
Color col = CurrentPixel.ToColor();
// Convert the color to HSV
HsvColor hsv = HsvColor.FromColor(col);
// Access the HSV values this way:
int H = hsv.Hue;
int S = hsv.Saturation;
int V = hsv.Value;
Если вам понадобилось изменить значения параметров H, S и V, а потом получить новое значение цвета в модели RGB, то вы можете сделать это обратным преобразованием цвета из HSV в RGB (стандартный тип ColorBgra для paint.net пикселов). Для этого можно использовать следующий код.
Код: Выделить всё
// Reassemble the H, S, and V into an HSV color
hsv = new HsvColor(H,S,V);
// Put it back into a ColorBgra value for Paint.NET
ColorBgra NewPixel = ColorBgra.FromColor(hsv.ToColor());
NewPixel.A = CurrentPixel.A; // Retain the original alpha value