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

 
« Предыдущая статья   Следующая статья »