Как найти все цвета между двумя цветами? - PullRequest
1 голос
/ 17 мая 2011

Мне нужно выбрать два цвета, затем найти X цветов (или тонов) между ними, каждый из которых отделен одинаковым «расстоянием» от другого.

Я до сих пор не понимаю, как образуются цвета. Стоит ли использовать HSV, RGB или hex?

Ответы [ 5 ]

2 голосов
/ 17 мая 2011

Если вы действительно не знаете, какой вид цветов вам нужен, практически невозможно получить все цвета между двумя цветами.

Просто посмотрите напредставления цветов - есть колеса с такими цветами:

enter image description here

, и вы можете выбрать цвета на некоторой прямой линии, по часовой стрелке или против часовой стрелки, и вы получите разные результаты.

В случае цветов RGB их количество не ограничено и равно 16 777 216 (245 ^ 3).Но вы действительно хотите выбрать все эти цвета?Выберите метод, чтобы различать цвета «между» двумя другими цветами, а затем просто примените его и найдите эти промежуточные цвета.Не существует "единственного и единственного" лучшего способа выбора цветов между двумя разными цветами.

РЕДАКТИРОВАТЬ:

В качестве альтернативы, вы можете просто использовать Color Difference concept и выберите все цвета, которые ближе к обоим базовым цветам, чем эти базовые цвета, близки друг к другу.Но я оставлю вам все расчеты.

1 голос
/ 17 мая 2011

Самое простое, что нужно сделать, это взять значения RGB первого и второго цветов и интерполировать их вместе, т. Е.

$b1 = $color1['blue'];
$b2 = $color2['blue'];

for($i=0; $i<$X; $i++){
    $b = round($b1 + (1.0 * ($b2 - $b1) * $i / $X));
    // Do the same for the red / green values
}

РЕДАКТИРОВАТЬ: Вы также можете использовать значение HSV вместо значения RGB

0 голосов
/ 17 мая 2011

Как правило, цвета между двумя цветами - это цвета, которые находятся на линии, соединяющей цвета в данном цветовом пространстве. Таким образом, в цветовом пространстве RGB цвета отличаются от других цветовых пространств.

0 голосов
/ 17 мая 2011

Цвета представлены битами, как и все остальное в компьютерах.

#FFFFFF представляет белый цвет, а #000000 - черный. Это запись RGB в шестнадцатеричном формате. Чтобы получить числовое значение для каждого, преобразуйте его в целое число без знака. Тогда у вас есть свой диапазон, который нужно разделить.

0 голосов
/ 17 мая 2011

Я думаю, что ваш лучший вариант - использовать представление HSL . Затем вы можете интерполировать, используя значение оттенка. Вы получите лучшие результаты, чем при использовании RGB-интерполяции.

...