我有一个预定义的 rgb 值数组。我希望能够将用户定义的颜色与我的数组进行比较,并返回 Objective C 中最接近的匹配。
任何帮助是极大的赞赏。
您可以尝试查找预定义颜色和用户定义颜色之间的平方和差异,并选择具有最小“距离”的预定义颜色。
例如,假设用户定义的颜色是[120 300 200]
,预定义的颜色是[100 250 150]
,那么差的平方和和得分是:
(120-100)*(120-100) + (300-250)*(300-250) + (200-150)*(200-150) = 5400
- 并选择差异最小的首选颜色。
您需要决定要测试的色彩空间。
HSL 可以说是比 RGB 更好的色彩空间,因为你可以给“色调差异”更多的权重,而对“亮度”给予更少的权重。在 RGB 空间中,您需要扭曲您的差异,因为与其他颜色相比,眼睛更善于辨别绿色阴影。
这就引出了一个问题,或者颜色的接近度是什么。
你需要试试这个,颜色并不全是数学。如果想找到 3D 空间中两点之间的距离(有三种颜色),给定 color1 和 color2 的数学公式为: ((r2-r1)^2 + (b2-b1)^2 + (g2-g1) ^2)^0.5(最终的平方根对于比较而言不是必需的)。
可能更好的方法是在 HSB 空间中进行计算,可能只看色调。
首先,您应该定义一个距离函数。最简单的是向量长度函数:所有维度的差异平方和。
然后只需遍历您的阵列并选择壁橱之一(距离最小)。