我想从一个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
答案 0 :(得分:4)
你解释的算法基本上是:“一种颜色由两个RGB组件组成。让最强的RGB组件为S,另一个组件为O.创建255个变体,让S为(255),O为0到255 。“
E.g。以下所有示例都会产生相同的结果:
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或3个组件的颜色(实际上大多数颜色)。
如果您的目标是找到相似的颜色(例如某个距离的颜色),那么有更好的方法。例如,您可以将颜色转换为HSV颜色空间(色调,饱和度,值),然后如果组件H,S或V中的任何一个与原始颜色相差+/- 10步,则表示颜色相似。
例如:
rgb(255,100,0)=> HSV(24100100)
你的范围是hsv([14-34],[90-110],[90-110])
答案 1 :(得分:0)
嗯,我不确定我是否正确理解这一点,但我认为你说的其中一个数字高于其他数字,其中一个数值总是为零。如果是这种情况,您应该能够使用类似于
的简单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) {
.
.
.
}
希望能帮到你解决问题。