如何获取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: 这是它应该是什么样的?
h = 1至360,步长为5步,s = 1至100,v = 89
答案 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。