Как перевести цвет из HSV-представления в RGB?
Для перевода цвета из HSV в RGB-представление, воспользуйтесь следующей функцией:
void HSV2RGB (unsigned char &r, unsigned char &g, unsigned char &b,
unsigned int i_hue, unsigned char sat, unsigned char val)
/* Вход:
* 0 <= hue < 360 градусов - оттенок. Основные цвета:
* 0 - красный, 60 - желтый,
* 120 - зеленый, 180 - голубой
* 240 - синий, 300 - пурпурный
* hue == 360 - неопределён !!!
* Остальные цвета между ними
* 0 <= sat <= 255 - Saturation - насыщенность
* 0 <= val <= 255 - Value - светлота
*
* Выход:
* 0 <= r,g,b <= 255 - значения красного, зеленого, синего
*/
{
int ii;
double fr, hue;
unsigned char c1, c2, c3;
if (!sat)
r = g = b = val;
else
{ /* Хроматический цвет */
while (i_hue >= 360)
i_hue -= 360;
hue = i_hue;
ii = (int)(hue /= 60.0);
fr = hue - ii;
c1 = (val * (255 - sat)) / 255;
c2 = (val * (255 - sat * fr)) / 255;
c3 = (val * (255 - sat * (1.0 - fr))) / 255;
switch (ii)
{
case 0: r = val; g = c3; b = c1; break;
case 1: r = c2; g = val; b = c1; break;
case 2: r = c1; g = val; b = c3; break;
case 3: r = c1; g = c2; b = val; break;
case 4: r = c3; g = c1; b = val; break;
case 5: r = val; g = c1; b = c2; break;
} // switch
} // if (!sat)
} // HSV 2 RGB