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:这是它应该的样子吗?
h=1 到 360,步长 5 pt,s=1 到 100,v = 89
我不确定 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。