如果我有一个调色板,找到最接近的Web Safe颜色。

如何将 r,g,b 值与 websafe 调色板进行比较,以找到 r,g,b 值的最佳匹配?

有一个问题是:

哪种算法最适合在区配色方案中找到与另一种颜色最接近的颜色?

但我觉得那不是我需要的。我只需要比较 r,g,b 和 websafe 颜色,并找出 websafe 颜色是否是最佳选择。

这是我现在的代码:

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)

这是它应该的样子吗?

http://imgur.com/LwFGQ

h 从 1 到 360,每隔 5 个单位;s 从 1 到 100;v = 89

原文链接 https://stackoverflow.com/questions/8395680

点赞
stackoverflow用户55637
stackoverflow用户55637

我不确定 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)

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

2011-12-06 06:21:41