Найти цветовой диапазон
Вопрос
Я хочу найти диапазон цветов по значению одного значения RGB.
Если бы мне дали, например, rgb(0,100,200), это дало бы мне все, что находится между rgb(0,0,255) и rgb(0,255,255).Однако не RGB(255,0,255).
Аналогично RGB(150,50,0).Возвращаться:RGB(255,0,0) и RGB(255,255,0).Не RGB(255,0,255).
Придать смысла?
Я использую PHP
Решение
Алгоритм, который вы объясняете, в основном:«Цвет состоит из двух компонентов RGB.Пусть самым сильным компонентом RGB будет S, а другим компонентом — O.Создайте 255 вариантов, в которых S будет равно (255), а O будет находиться в диапазоне от 0 до 255».
Например.все приведенные ниже примеры дают один и тот же результат:
a) rgb(0,100,200)
b) rgb(0,199,200)
c) rgb(0,254,255)
d) rgb(0,1,2)
Result: rgb(0,[0-255],255)
Это означает, что у вас есть только 6 вариантов.
- Красный — самый большой компонент, следующий по величине — зеленый => rgb(255,[0-255],0)
- Красный — самый крупный компонент, следующий по величине — синий => rgb(255,0,[0-255])
- Зеленый — самый большой компонент, следующий по величине красный => rgb([0-255],255,0)
- Зеленый — самый крупный компонент, следующий по величине — синий => rgb([0-255],0,255).
- Синий — самый крупный компонент, следующий по величине — красный => rgb([0-255],0,255).
- Синий — самый большой компонент, следующий по величине — зеленый => rgb(0,[0-255],255)
Назначение вашего алгоритма неясно, поэтому я предполагаю, что ваш вариант использования на самом деле отличается от того, что вы объясняете.Он не обрабатывает цвета с 1 или 3 компонентами (на самом деле большинство цветов).
Если ваша цель — найти похожие цвета (например,цвет на определенном расстоянии) есть подходы получше.Например, вы можете преобразовать цвета в цветовое пространство HSV (оттенок, насыщенность, значение), а затем сказать, что цвет аналогичен, если любой из компонентов H, S или V находится на +/- 10 шагов от вашего оригинала.
Например.:
rgb(255100,0) => hsv(24100100)
Тогда ваш диапазон будет hsv([14-34],[90-110],[90-110])
Другие советы
Хм, не уверен, что я правильно понимаю, но я думаю, что вы говорите, что одно из чисел выше, чем два других, и одно из значений всегда равно нулю. Если это так, вы можете использовать простую инструкцию if-else, аналогичную
if (r > g && r > b) {
if (g > 0) {
color1 = rgb(255, 0, 0);
color2 = rgb(255, 255, 0);
}
else {
color1 = rgb(255, 0, 0);
color2 = rgb(255, 0, 255);
}
}
else if (r < g && g > b) {
.
.
.
}
Надеюсь, что это поможет вам с вашей проблемой.