Вопрос

Я хочу найти диапазон цветов по значению одного значения 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 вариантов.

  1. Красный — самый большой компонент, следующий по величине — зеленый => rgb(255,[0-255],0)
  2. Красный — самый крупный компонент, следующий по величине — синий => rgb(255,0,[0-255])
  3. Зеленый — самый большой компонент, следующий по величине красный => rgb([0-255],255,0)
  4. Зеленый — самый крупный компонент, следующий по величине — синий => rgb([0-255],0,255).
  5. Синий — самый крупный компонент, следующий по величине — красный => rgb([0-255],0,255).
  6. Синий — самый большой компонент, следующий по величине — зеленый => 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) {
   .
   .
   .
}

Надеюсь, что это поможет вам с вашей проблемой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top