Алгоритм, который вы объясняете, в основном таков: «Цвет состоит из двух компонентов 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 шагов от исходного.
E.g.:
RGB (255,100,0) => HSV (24,100,100)
Ваш диапазон тогда hsv ([14-34], [90-110], [90-110])
person
Dan Gøran Lunde
schedule
06.08.2009