Алгоритм, который вы объясняете, в основном: «Цвет состоит из двух компонентов 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 (Hue, Saturation, Value) и затем сказать, что цвет похож, если любой из компонентов H, S или V находится на +/- 10 шагах от вашего оригинала.
Например:
rgb (255 100,0) => hsv (24 100 100)
Ваш диапазон будет hsv ([14-34], [90-110], [90-110])