3

我有一个预定义的 rgb 值数组。我希望能够将用户定义的颜色与我的数组进行比较,并返回 Objective C 中最接近的匹配。

任何帮助是极大的赞赏。

4

4 回答 4

2

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

例如,假设用户定义的颜色是[120 300 200],预定义的颜色是[100 250 150],那么差的平方和和得分是:

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

于 2009-11-20T02:32:38.453 回答
2

您需要决定要测试的色彩空间。

HSL 可以说是比 RGB 更好的色彩空间,因为你可以给“色调差异”更多的权重,而对“亮度”给予更少的权重。在 RGB 空间中,您需要扭曲您的差异,因为与其他颜色相比,眼睛更善于辨别绿色阴影。

于 2009-11-20T03:42:58.653 回答
1

这就引出了一个问题,或者颜色的接近度是什么。

你需要试试这个,颜色并不全是数学。如果想找到 3D 空间中两点之间的距离(有三种颜色),给定 color1 和 color2 的数学公式为: ((r2-r1)^2 + (b2-b1)^2 + (g2-g1) ^2)^0.5(最终的平方根对于比较而言不是必需的)。

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

于 2009-11-20T02:36:42.140 回答
0

首先,您应该定义一个距离函数。最简单的是向量长度函数:所有维度的差异平方和。

然后只需遍历您的阵列并选择壁橱之一(距离最小)。

于 2009-11-20T02:37:25.913 回答