如果我有调色板,找到最接近的网络安全颜色

Sco*_*ott 2 lua colors color-palette web-safe-colors

如何获取 r、g、b 值并将它们与网络安全调色板进行比较,以找到 r、g、b 值的最佳匹配?

有一个: 在数组中找到与另一种颜色最接近的颜色的最佳算法是什么?

但我不认为这是我需要的。我只需要将 r、g、b 与网络安全颜色进行比较,然后找出网络安全颜色是否是最佳选择。

编辑1:删除

Edit2:这是我目前所拥有的。

local r, g, b = HSV2RGB(h, s, v)
local dither = copy(WEB_SAFE)
local lmod
for i, v in ipairs(dither) do
        local r2, g2, b2 = Color2RGBA(v)
        local hh, ss, vv = RGB2HSV(r2, g2, b2)
        local a = hh - h
        local b = ss - s
        local c = vv - v
        local mod = a*a + b*b + c*c
        if not lmod or mod < lmod then
                lmod = mod
                r, g, b = r2, g2,b2
        end
end
texture:SetBackgroundColor(r, g, b)
Run Code Online (Sandbox Code Playgroud)

编辑3:这是它应该的样子吗?

http://imgur.com/LwFGQ

h=1 到 360,步长 5 pt,s=1 到 100,v = 89

Jef*_*tin 5

我不确定 HSV 是执行计算的最佳颜色空间——而且它是一个圆柱体,而不是一个立方体,所以你的距离公式(在 RGB 中可以正常工作)会对 HSV 产生不合适的结果。

在任何情况下,Web 安全调色板本身就是一个简单的 RGB 颜色立方体,每个组件有六个可能的值 (0-5)。您甚至不需要执行像迭代这样复杂的操作来从输入颜色派生 Web 安全颜色:只需为每个颜色分量(R、G、B)独立确定适当的 Web 安全值。

假设您的 RGB 分量值范围为 0..255:

local max_color_component_value = 255
local quantum = max_color_component_value / 5

r = quantum * math.floor((r + (quantum / 2)) / quantum)
g = quantum * math.floor((g + (quantum / 2)) / quantum)
b = quantum * math.floor((b + (quantum / 2)) / quantum)
Run Code Online (Sandbox Code Playgroud)

如果使用其他范围,请适当调整 max_color_component_value。