您解释的算法基本上是:“一种颜色由两个 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(255,100,0) => hsv(24,100,100)
那么你的范围是 hsv([14-34],[90-110],[90-110])