Question

Comment prendre les valeurs R, G, B et les comparer à une palette de couleurs WebSafe pour trouver la meilleure correspondance pour la valeur R, G, B?

Il y a celui-ci:Quel est le meilleur algorithme pour trouver la couleur la plus proche dans un tableau d'une autre couleur?

Mais je ne pense pas que ce soit ce dont j'ai besoin. J'ai juste besoin de comparer un R, G, B avec une couleur WebSafe et de savoir si la couleur WebSafe est le meilleur choix.

Edit1: supprimé

Edit2: C'est ce que j'ai jusqu'à présent.

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: Est-ce ce à quoi il est censé ressembler?

http://imgur.com/LwFGQ

h = 1 à 360 à 5 étapes de pt, s = 1 à 100, v = 89

Était-ce utile?

La solution

Je ne suis pas sûr que HSV soit le meilleur espace de couleur pour effectuer le calcul - c'est également un cylindre, pas un cube, donc votre formule de distance (qui fonctionnerait bien dans RVB) produirait des résultats inappropriés pour le HSV.

En tout cas, le Palette de sécurité Web est lui-même un simple cube de couleur RVB, avec six valeurs possibles (0-5) pour chaque composant. Vous ne devriez même pas avoir besoin de faire quelque chose d'aussi complexe que d'itérer pour dériver une couleur de sécurité Web à partir d'une couleur d'entrée: déterminez simplement la valeur de sécurité Web appropriée pour chaque composant de couleur (R, G, B) indépendamment.

Sur l'hypothèse téméraire que les valeurs de composants RVB varient de 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)

Si une autre plage est utilisée, ajustez max_color_component_value de manière appropriée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top