Программно пройти через 24-битный цветовой спектр, получить x количество средних цветов

Да, я пытаюсь заново изобрести велосипед. :-) . Я делаю собственное сжатие изображений (тестирую некоторые идеи для передачи частей изображений по TCP). В любом случае... Я пытаюсь пройти через 24-битный цвет rgb, получить полный линейный диапазон и (перейти через) этот диапазон с интервалами x.

Я пытаюсь получить в среднем 99 цветов по всему спектру. (24bit/99) = 167488.6363636364 , поэтому с интервалом 16K я хочу выбрать цвет для своей 99-цветной палитры.

У меня проблемы с пониманием того, как на самом деле работает RGB... Кажется, линейного диапазона НЕТ... или есть...?

В настоящее время я делаю следующее:

var_interval = (255 * 255 * 255) / 99

 For r = 0 To 255
     For g = 0 To 255
          For b = 0 To 255

                    If var_counter = var_interval Then
                    objWriter.Write(r & "," & g & "," & b)

                    End If

                    var_counter += 1
           Next
     Next
 Next

Я получаю свои цвета, но этот шаг не генерирует цвета "масштабирования", если хотите.

Любые идеи?


person Louis van Tonder    schedule 26.06.2011    source источник
comment
Не существует линейного диапазона цветов. Поскольку есть компоненты RGB, вам необходимо рассмотреть трехмерный подход, и хотя вы можете определить линейные пути через трехмерное цветовое пространство, какое направление вы выберете?   -  person pavium    schedule 26.06.2011
comment
точно.... :-) Это то, что я нахожу... это просто большая куча цветов, без реальной стандартной структуры?   -  person Louis van Tonder    schedule 26.06.2011
comment
Итак, в таком случае, должен ли я идти и выбирать свои собственные цвета для палитры?   -  person Louis van Tonder    schedule 26.06.2011
comment
Так совпало, что сейчас я пытаюсь понять, как выбрать 100 отличных цветов из 16,7 миллионов для картографирования. Я мог бы попытаться превратить его в вопрос, но я добавил ваш вопрос в избранное и оставлю комментарий, если что-то найду.   -  person pavium    schedule 27.06.2011
comment
Круто, значит, пока оставим это здесь?   -  person Louis van Tonder    schedule 27.06.2011


Ответы (1)


Конечно, есть способ итерации по цветовому спектру, но выберете ли вы этот подход, это ваш собственный выбор :). Вы можете использовать цветовое пространство HSL (оттенок, насыщенность и яркость) вместо RGB (красный, зеленый, синий). Оттенок представляет, какой цвет (в диапазоне от 0 до 360), насыщенность — сколько этого цвета вам нужно (от 0 до 100), а яркость — насколько ярким вы хотите его видеть.

Итак, чтобы ответить на ваш вопрос, вы можете взять 360/99 в качестве частоты дискретизации из оттенка, выбрать постоянное значение и интенсивность, которые вы хотите, а затем преобразовать это в пространство RGB для его отображения. Для преобразования см.: http://web2.clarkson.edu/class/image_process/RGB_to_HSI.pdf

а для получения информации о цветовом пространстве HSL см.: http://en.wikipedia.org/wiki/HSL_and_HSV

person Noremac    schedule 03.11.2011