Domanda

È noto il colore esatto dello sfondo.

Immagina un carattere anti-alias su uno sfondo verde. Ora vogliamo cambiare il colore di sfondo dell'immagine in rosso.

Quindi ... Come posso estrarre il "non sfondo"? parte del colore dal pixel e aggiungerlo (o "fondere") sopra un altro colore bg in seguito?

Conosciamo anche il colore del carattere, quindi sappiamo quali pixel sono completamente opachi.

È stato utile?

Soluzione

Ogni pixel nell'immagine è il colore di sfondo, il colore del carattere o una combinazione dei due. Quindi è possibile specificare l'intera immagine con i valori RGB di sfondo, i valori RGB dei caratteri e una matrice di valori tra 0 e 1, dove, diciamo, 0 indica che il pixel è il colore di sfondo, 1 indica che il pixel è il colore del carattere. Un valore come 0,1 indica che il pixel è principalmente di colore di sfondo con un po 'di colore del carattere, ecc.

Un'espressione come:

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

ti darà questi valori per qualsiasi pixel nell'immagine. Per costruire i nuovi valori RGB utilizzando un nuovo colore di sfondo, utilizzare questo valore per fondere il colore del carattere con il nuovo colore di sfondo.

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top