C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Как перевести цвет из RGB-представления в HSV? / Работа с графикой, экраном / Borland C++

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