Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


Перевод цветов из режима RGB в HSV

Поиск:
Смит предложил построить модель субъективного восприятия в виде объемного тела HSV (цветовой тон, насыщенность, светлота).

Hасыщенность меняется от 0 до 1. Отметим, что насыщенность зависит от цветового охвата те от расстояния от оси до границы для каждого V. При S=1 цвета или их дополнения полностью насыщенны. Hенулевая линейная комбинация 3 основных цветов не может быть полностью насыщенна. Если S=0, то тон H неопределен, те на центральной оси находятся ахроматические, серые цвета.

Модель HSV соотвествует тому, как составляют цвета художники. Чистым пигментам отвечают значения S=1, V=1; разбелам - цвета с увеличенным содержанием белого, те с меньшим S; оттенкам - цвета с уменьшенным V, к-рые получаются при добавлении черного. Тон изменяется при уменьшении как V так и S.

Преобразование из цветового пространства RGB->HSV проводиться по данному ниже алгоритму, также взятому у Смита:

 
Код

RGB - остновные цвета (0-1),
  H - цветовой тон (0-360ш), 0ш - красный
  S - насыщенность (0-1)
  V - светлота (0-1)

  MAX - функция определения максимума
  MIN - функция определения минимума

   /Определение светлоты/

   V=MAX(R, G, B)

   /Определение насыщенности/

   TEMP=MIN(R, G, B)
   if V=0 then S=0 else S=(V-TEMP)/V end if

   /Определение цветового тона/

   if S=0 then

    H=Hеопределенность

   else

    Cr=(V-R)/(V-TEMP)
    Cg=(V-G)/(V-TEMP)
    Cb=(V-B)/(V-TEMP)

    /Цвет между желтым и пурпурным/

    if R=V then H=Cb-Cg

    /Цвет между голубым и желтым/

    if G=V then H=2+Gr-Cb

    /Цвет между пурпурным и голубым/

    if B=V then H=4+Cg-Cr
    H=H*60

    /Приведение к положительным величинам/

    if H<0 then H=H+360 end if

  finish
Автор: Д. Роджерс






Просмотров: 2950

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную