Pregunta

¿Cómo tomo los valores R, G, B y los comparo con una paleta de colores de WebSafe para encontrar la mejor coincidencia para el valor R, G, B?

Ahí está este:¿Cuál es el mejor algoritmo para encontrar el color más cercano en una matriz a otro color?

Pero no creo que sea lo que necesito. Solo necesito comparar un R, G, B con un color aficionado y descubrir si el color de WebSafe es la mejor opción.

Edit1: eliminado

Edit2: Esto es lo que tengo hasta ahora.

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)

Editar 3: ¿Es así lo que se supone que debe ser?

http://imgur.com/LwFGQ

h = 1 a 360 a 5 pt pasos, s = 1 a 100, v = 89

¿Fue útil?

Solución

No estoy seguro de que HSV sea el mejor espacio de color para realizar el cálculo, también es un cilindro, no un cubo, por lo que su fórmula de distancia (que funcionaría bien en RGB) produciría resultados inapropiados para HSV.

En cualquier caso, el Paleta de seguridad web es en sí mismo un simple cubo de color RGB, con seis valores posibles (0-5) para cada componente. Ni siquiera debe necesitar hacer algo tan complejo como iterando para derivar un color seguro web de un color de entrada: simplemente determine el valor de seguridad web apropiado para cada componente de color (R, G, B) de forma independiente.

En la suposición de la erupción de que los valores de su componente RGB varían 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 se usa algún otro rango, ajuste Max_Color_Component_Value de manera apropiada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top