2009-11-20 99 views

回答

1

您可以尝试查找预定义颜色与用户定义颜色之间的平方和差异,并选择具有最小“距离”的预定义颜色。

E.g.假设用户定义的颜色是[120 300 200]和预定义的颜色是[100 250 150],然后平方差之和的分数为:

(120-100)*(120-100) + (300-250)*(300-250) + (200-150)*(200-150) = 5400 - 并选择prefefined颜色用最少的差异。

+0

谢谢雅各布。我可以存储每种预定义颜色的UIColor值,并根据其浮点值执行最接近的比较? – yesimarobot 2009-11-20 02:42:00

+0

是的,你可以做到这一点。如果你想让速度非常快,你可以用预定义的颜色来构建KD树 - 这将使得查询非常快。否则,你可以做一个暴力 - 比较每种颜色。 – Jacob 2009-11-20 03:47:39

+0

很酷。我看最多不超过1000个comarisons。我在php中实现了你的建议,效果很好。我期待为iPhone实现这一点。 KD树是否值得mytime? – yesimarobot 2009-11-20 04:09:07

1

这引发了一个问题,或者说颜色是多么接近。

你将需要尝试这一点,颜色不是所有的数学。如果想要找出三维空间中两点之间的距离(有三种颜色),给定color1和color2的数学公式为:((r2-r1)^ 2 +(b2-b2)^ 2 +(g2-g1)^2)^ 0.5(为了比较目的,最终平方根不是必需的)。

可能更好的方法是在HSB空间进行计算,可能只是看Hue。

0

首先,你应该定义一个距离函数。平凡的一个是矢量长度函数:所有维度的平方差之和。

然后,只需穿过您的阵列,然后选择衣橱(最小距离)。

2

您需要确定您正在测试的颜色空间。

HSL可以说比RGB更好的色彩空间,因为您可以给予“色调差异”更多的权重,减少“亮度”。在RGB空间中,您需要歪曲您的差异,因为眼睛比其他颜色更适合辨别绿色的色调。