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?

http://imgur.com/LwFGQ

H = 1 a 360 a 5 pt passaggi, S = 1 a 100, v = 89

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top