Pregunta

El color de fondo exacto es conocido.

Imagina una fuente con antialias sobre un fondo verde. Ahora queremos cambiar el color de fondo de la imagen a rojo.

Entonces ... ¿Cómo extraigo el " non-background " ¿Parte del color del píxel y agregarlo (o " mezclar ") encima de otro color de bg después?

También conocemos el color de la fuente, por lo que sabemos qué píxeles son completamente opacos.

¿Fue útil?

Solución

Cada píxel de la imagen es el color de fondo, el color de fuente o alguna combinación de ambos. Por lo tanto, puede especificar la imagen completa con los valores RGB de fondo, los valores RGB de la fuente y una matriz de valores entre 0 y 1, donde, digamos, 0 significa que el píxel es el color de fondo, 1 significa que el píxel es el color de la fuente. Un valor como 0.1 significa que el píxel es principalmente un color de fondo con un poco de color de fuente, etc.

Una expresión como:

blend_value = ((pixel.R - bg.R) / (font.R - bg.R)
              + (pixel.G - bg.G) / (font.G - bg.G)
              + (pixel.B - bg.B) / (font.B - bg.B)) / 3

le dará estos valores para cualquier píxel en la imagen. Para construir los nuevos valores RGB utilizando un nuevo color de fondo, use este valor para combinar el color de fuente con el nuevo color de fondo.

new_pixel.R = blend_value * font.R + (1 - blend_value) * new_bg.R
new_pixel.G = blend_value * font.G + (1 - blend_value) * new_bg.G
new_pixel.B = blend_value * font.B + (1 - blend_value) * new_bg.B
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top