рисование радужной палитры

У меня 8-битная цветовая палитра, поэтому у меня 256 цветов.

Палитра представляет собой массив из [256 * 3] {r, g, b} значений. Теперь мне нужно нарисовать из него цветовой спектр. Таким образом, в основном я должен выбрать 256 из 256*256*256 возможных значений, которые позволят мне нарисовать радугу как можно точнее.

Подобные вопросы здесь, в SO, указывают на подход, основанный на HSV, но я ищу реализацию RGB, потому что у меня есть API, определенные таким образом.

Любая помощь горячо приветствуется.


person sud03r    schedule 07.07.2010    source источник
comment
HSV — это способ конвертировать в RGB каждое значение HSV, которое у вас есть.   -  person Brian R. Bondy    schedule 07.07.2010
comment
На самом деле, HSL тоже может работать.   -  person MSalters    schedule 08.07.2010


Ответы (2)


Решение HSV по-прежнему верно, потому что оно в значительной степени отражает вашу проблему. «Радуга» — это по определению ряд цветов с постоянными S и V, но с переменным H.

person MSalters    schedule 07.07.2010
comment
Да, используйте правильную цветовую модель, которая делает то, что вы хотите, а затем конвертируйте. - person Brian R. Bondy; 07.07.2010
comment
можете ли вы уточнить, как я могу варьировать оттенок от 0 до 360 для создания 256 цветов? - person sud03r; 07.07.2010
comment
Оттенок не обязательно является целым числом. Сохраните его в double и увеличивайте с шагом (360,0/256,0). Вы, конечно, получите double значений R, G и B. Округлите их, когда вы помещаете цвет в палитру, а не раньше. - person MSalters; 08.07.2010

На самом деле проще всего использовать HSV, потому что это то, что вы все равно в конечном итоге реализуете. Держите S и V фиксированными (оба на 1) и пусть H изменяется от 0° до 360°.

Рецепт преобразования HSV в RGB описан в Википедии.

person Thomas    schedule 07.07.2010
comment
варьироваться от 0 до 360? У меня просто 256 цветов? - person sud03r; 07.07.2010
comment
Оттенок часто измеряется в градусах на цветовом круге. Вы можете использовать 0..255, или 0..1, или 0%..100%, если вы соответствующим образом нормализуете уравнения. - person Thomas; 07.07.2010