Ниже приведен скриншот небольшого приложения, которое я создаю. Я хотел бы охватить наиболее значимые цвета из всего цветового спектра, но мне не хватает многих цветов. Я не получаю ожидаемого результата; Я не вижу некоторые цвета, такие как желтый или оранжевый.
У меня есть 40 плиток, расположенных 8x5. Я разделил цветовой спектр RGB примерно из 16 миллионов цветов на 40 и преобразовал это значение в шестнадцатеричное, чтобы оно применялось к плиткам.
Выцветание/смешивание от голубого к красному явно не является подходом, который охватывает все части спектра RGB. Что я пропустил, или как я могу это сделать?
RGB является трехмерным, поэтому для понимания проблемы полезно представить цветовое пространство RGB как трехмерную форму. Классический способ — это куб, основанный на суммах трех измерений: красного, зеленого и синего:
(изображения взяты из Digital Color Design with the RGB Color Cube: Visualization and Color Coordinate Activity , журнальная статья, на которую я наткнулся, когда писал это, и которую стоит прочитать всем, кто заинтересован)
Куб с черным и белым в противоположных углах, красно-зеленым и синим в углах рядом с черным и смесями - желтым, голубым, пурпурным - в углах, соединенных с белым. Во втором примере «вверх» добавляется зеленый, «вниз-влево» добавляется красный, «вниз-вправо» добавляется синий.
Как превратить куб в плоскость? Это как превратить плоский лист бумаги в куб, только наоборот...
... вы можете сделать это, сплющив куб в виде складного плана (как на верхнем правом изображении) или вырезав из куба кусочки (как на верхнем среднем изображении). Затем у вас есть свои цвета, и то, как вы их расставите, зависит от вас.
Но не хватает одного - серого. Все эти цвета очень насыщенные. Если вы хотите представить все цветовое пространство RGB, включая оттенки серого и частично ненасыщенные цвета, вам нужно использовать другой набор трех измерений для создания куба RGB: HSL (оттенок, насыщенность и яркость) или HSB (оттенок, насыщенность). и яркость AKA HSV, значение).
Это сравнение (из wikimedia) показывает кубы на основе RGB, затем HSL, затем HSB:
(обратите внимание, что все они являются цветами RGB - HSL и HSB - это просто разные способы понимания цветового пространства)
Я бы предложил использовать что-то, что перебирает в RGB каждую возможную комбинацию HSB, разнесенную так, чтобы количество результатов было всего 40, а затем найти подходящий способ их упорядочить, возможно, на основе срезов.
Имейте в виду, что с 3 измерениями и всего 40 фигурами у вас не будет много шагов. Например, у вас может быть 2 уровня насыщенности (насыщенный, сероватый) , 3 уровня яркости (бледный, средний, темный) и 6 уровней оттенка (синий, голубой, зеленый, желтый, красный, пурпурный) , и это даст у вас 36 цветов, осталось только 4 для крайностей (белый, черный, светло-серый, темно-серый)
В цветовой модели RGB у вас есть три канала reg, зеленый и синий со значениями в диапазоне от 0 до 255 (вы это знали!).
Чтобы охватить весь спектр, вы комбинируете три канала с определенным количеством опций стоимости.
Таким образом, если у вас есть x вариантов значения количества для каждого канала, вы получите x * x * x = x^3 значения цвета.
Для двух вариантов, например 0 и 255, вы получаете 2 ^ 3 = 8 цветов.
Для шести вариантов, составляющих пять (= 6 - 1) сегментов, у вас есть значения
0 * (255/5), 1 * (255/5), 2 * (255/5), 3 * (255/5) , 4 * (255/5), 5 * (255/5)
, что дает 6^3 = 216 цветов, что вы можете увидеть в качестве примера здесь .
Приведенный выше диапазон показал вам, как построить одномерный массив для одного канала. Поскольку три канала одинаковы, вы можете использовать его для всех трех каналов.
При этом вы строите свой двумерный массив:
0, 0, 0
51, 0, 0
102, 0, 0
...
Думаю, вы поняли. Если нет, вам придется задать этот вопрос в Stack Overflow (и указать мне на него).
Вот как бы я это сделал - это может быть похоже на то, что предлагал другой Джон, но менее уравненно.
Таким образом, каждый цвет RGB идет от 0 до 255. Выясните, сколько образцов вы хотите для каждого цвета, для этого очень простого примера я скажу 3, что равно 0, 128, 255 (128 — это округленная половина пути) .
Теперь проработайте все возможные комбинации:
0, 0, 0 | 0, 0, 128 | 0, 0, 255 | 0, 128, 0 | 0, 255, 0 | 0, 128, 128 | 0, 128, 255 | 0, 255, 128 | 0, 255, 255 | 128, 0, 0 | 255, 0, 0 | 128, 128, 0 | 128, 255, 0 | 128, 128, 128 | 128, 128, 255 | 128, 255, 128 | 128, 255, 255 | 255, 255, 255
DA01