Как перевести цвет из RGB-представления в HSV?
Для перевода цвета из RGB в HSV воспользуйтесь следующим кодом:
RGB2HSV (unsigned int &hue, unsigned char &sat, unsigned char &val,
unsigned char r, unsigned char g, unsigned char b)
/*
* 0 <= r,g,b <= 255 - значения красного, зеленого, синего
*
*
* Выход:
* 0 <= hue <= 360 градусов - оттенок.
* 0 <= sat <= 255 - Saturation - насыщенность
* 0 <= val <= 255 - Value - яркость
*/
{
double h, rc, gc, bc, dmax;
unsigned char s, v;
unsigned char minc, maxc;
maxc = (r > g) ? ((r > b) ? r : b) : ((g > b)? g : b);
minc = (r < g) ? ((r < b) ? r : b) : ((g < b)? g : b);
s = 0; // Насыщенность
if (maxc)
{
s = (maxc - minc) * 255 / maxc;
}
sat = s;
val = maxc;
if (!s)
{ // Ахроматический цвет
hue = UNDEFINED_HUE;
}
else
{ // Хроматический цвет
dmax = maxc - minc;
rc = (maxc - r) / dmax; /* rc - удаленность */
gc = (maxc - g) / dmax; /* цвета от красного */
bc = (maxc - b) / dmax;
if (r == maxc)
{ // Цвет между желтым и пурпурным
h = bc - gc;
}
else if (g == maxc)
{ // Цвет между голубым и желтым
h = 2 + rc - bc;
}
else
{ // Цвет между пурпурным и голубым
h = 4 + gc - rc;
}
h *= 60.0;
if (h < 0.0)
{
h += 360.0;
}
hue = h;
if (hue == 360)
{
hue = 0;
}
} // if (!s)
} // RGB 2 HSV