Frage

Die genaue Hintergrundfarbe ist bekannt.

Stellen Sie sich eine Anti-Aliasing-Schrift auf einem grünen Hintergrund. Jetzt wollen wir die Hintergrundfarbe des Bildes zu rot ändern.

So .. Wie kann ich die „Nicht-Hintergrund“ -Teil der Farbe aus dem Pixel extrahieren und sie (oder „blend“) auf einer anderen bg Farbe später hinzufügen?

Wir wissen auch die Schriftfarbe, so dass wir wissen, welche Pixel sind völlig undurchsichtig.

War es hilfreich?

Lösung

Jedes Pixel im Bild ist entweder die Hintergrundfarbe, die Schriftfarbe oder eine Mischung aus beiden. So könnte man das ganze Bild mit dem Hintergrund RGB-Werte angeben, die Schrift RGB-Werte, und eine Reihe von Werten zwischen 0 und 1, wobei etwa 0 bedeutet das Pixel wird die Hintergrundfarbe, 1 bedeutet, dass das Pixel ist die Schriftfarbe. Ein Wert wie 0,1 bedeutet, dass das Pixel meist Hintergrundfarbe mit einem kleinen Schriftfarbe, etc.

Ein Ausdruck wie:

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

geben Sie diese Werte für jedes Pixel im Bild. Zur Konstruktion der neuen RGB-Werte eine neue Hintergrundfarbe verwenden, können Sie diesen Wert verwenden, um die Schriftfarbe mit der neuen Hintergrundfarbe zu mischen.

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top