Программно пройти 24-битный спектр цветов, получить х количество средних цветов - PullRequest
2 голосов
/ 26 июня 2011

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

Я пытаюсь получить в среднем 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

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

Есть идеи?

1 Ответ

3 голосов
/ 04 ноября 2011

Конечно, есть способ перебора цветового спектра, но если вы выберете этот подход, это ваш собственный выбор :). Вы можете использовать цветовое пространство 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

...