Trovare il colore web più vicino al web se ho una tavolozza
-
28-10-2019 - |
Domanda
Come faccio a prendere i valori R, G, B e confrontarli con una tavolozza di colori WebSafe per trovare la migliore corrispondenza per il valore R, G, B?
C'è questo:Qual è il miglior algoritmo per trovare il colore più vicino in un array a un altro colore?
Ma non penso che sia quello di cui ho bisogno. Devo solo confrontare una R, G, B con un colore WebSafe e scoprire se il colore WebAFE è la scelta migliore.
EDIT1: cancellato
EDIT2: questo è quello che ho finora.
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)
EDIT 3: È questo che dovrebbe apparire?
H = 1 a 360 a 5 pt passaggi, S = 1 a 100, v = 89
Soluzione
Non sono sicuro che HSV sia il miglior spazio colore in cui eseguire il calcolo-anche è un cilindro, non un cubo, quindi la formula a distanza (che funzionerebbe bene in RGB) produrrebbe risultati inappropriati per HSV.
In ogni caso, il Palette Web Safe è esso stesso un semplice cubo di colore RGB, con sei possibili valori (0-5) per ciascun componente. Non dovresti nemmeno fare qualcosa di così complesso come iterare per derivare un colore Web Safe da un colore di input: basta determinare il valore di sicurezza Web appropriato per ciascun componente di colore (R, G, B) in modo indipendente.
Nel presupposto dell'eruzione che i valori dei componenti RGB vanno da 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)
Se viene utilizzato qualche altro intervallo, regolare in modo appropriato Max_Color_Component_Value.