Как преобразовать RGB в HSV

Эта ветка форума посвящена вопросу, как самому сделать свой плагин (эффект) для Paint.NET. Для публикации своих эффектов используйте основной форум "Эффекты и плагины к Paint.NET"
Ответить
Аватара пользователя
xmario
Администратор
Сообщения: 3402
Зарегистрирован: 03 апр 2010, 20:12
Репутация: 45
Пол: Мужской
Откуда: Москва

Как преобразовать RGB в HSV

Сообщение xmario » 10 сен 2010, 12:36

Как преобразовать RGB в HSV в paint.net

Что такое 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.
Тем не менее, иногда требуется перевести значение цвета RGB в модель HSV. Преобразовать CurrentPixel в HSV просто, для этого понадобится код, подобный приведенному ниже.

Код: Выделить всё

// 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;
Как перевести HSV в RGB в paint.net

Если вам понадобилось изменить значения параметров 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
Если переменная NewPixel будет холстом назначения, то вы сможете сразу увидеть результат в paint.net.

Ответить

Вернуться в «Как сделать свой эффект (плагин) для Paint.NET»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей