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

时间:2011-12-06 05:21:22

标签: colors lua color-palette web-safe-colors

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

有这个: What is the best algorithm for finding the closest color in an array to another color?

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

Edit1:已删除

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)

编辑3: 这是它应该是什么样的?

http://imgur.com/LwFGQ

h = 1至360,步长为5步,s = 1至100,v = 89

1 个答案:

答案 0 :(得分:4)

我不确定HSV是进行计算的最佳色彩空间 - 它也是一个圆柱体,而不是一个立方体,因此你的距离公式(在RGB中工作正常)会对HSV产生不适当的结果

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

在rash假设您的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)

如果使用其他范围,请相应地调整max_color_component_value。