Как перевести цвет из 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

 
Следующая статья »