Функции для преобразования RGB >> HSV
00h: Intro;
Добрый день. Вот решил поделиться первой наработкой на MP. Эти процедуры преобазуют цвета из более удобного для человека HSV в привычный для программиста RGB. 01h: Теория; HSV - цветовая модель, использующая вместо удобных для техники RGB-компонент другие параметры: тон, насыщенность и яркость. H - цвет. Может быть от 0 до 360. Задаёт общий оттенок. S - чистота цвета. Может быть от 0 до 1. Чем S выше, тем полученный цвет насыщенней, чем меньше, тем ближе к нейтрально серому. V - яркость. Может быть от 0 до 1. Чем ближе к 1, тем светлее оттенок. Подробнее тут: ** http://ru.wikipedia.org/wiki/HSV_(цветовая_модель) ** http://en.wikipedia.org/wiki/HSL_and_HSV Прототипы функций для получения RGB-компонент цвета выглядят так: Function RFromHSV(intH,intS,intV:integer):integer; Function GFromHSV(intH,intS,intV:integer):integer; Function BFromHSV(intH,intS,intV:integer):integer; , где intH,intS,intV - исходные цвета в HSV, задаются в диапазоне [0..255] 02h: Практика; Казалось бы, к чему такие изощрения, если есть RGB? По крайней мере, одно применение я нашёл. Краткий алгоритм такой: 1) Получаем базовый цвет (H-компонента); 2) Рисуем фон этим цветом (H), при этом используем среднюю чистоту цвета и яркость. 3) Повышаем яркость и чистоту цвета процентов на 50. Рисуем элементы интерфейса (кнопки, например). H остаётся тем же. 4) Ещё раз повышаем яркость и чистоту цвета. Рисуем текст. В результате получается такой эффект: при смене базового цвета остальные цвета получаются автоматически, притом смотрятся довольно гармонично, кнопки просматриваются и надписи всегда читаемы. Примерно то же самое можно наблюдать в Windows Media Player'е последних версий при смене цвета скина. 03h: Скриншоты; 04h: Код модуля:; Код:
unit HSV2RGB; |
Ответ: Функции для преобразования RGB >> HSV
Спасибо! Жаль что на тухлом Паскале сделано, надо будет как-нибудь переписать на Си-лайк.
|
Ответ: Функции для преобразования RGB >> HSV
Код:
void rgb::hsl(unsigned char h,unsigned char s,unsigned char l) |
Ответ: Функции для преобразования RGB >> HSV
Тут писать-то нечего, в принципе.. Из диаграммы на Вики видно как зависят RGB от HSV. По ней, кстати, и сделал алгоритм. Вот только недопонял сам алгоритм на Вики: конкретно не понял f = H/60 - [H/60]
|
Часовой пояс GMT +4, время: 17:47. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot