Question

La couleur de fond exacte est connue.

Imaginez une police anti-aliasée sur un fond vert. Nous voulons maintenant changer la couleur de fond de l'image en rouge.

Alors .. Comment extraire le " non-background " partie de la couleur du pixel et l'ajouter ensuite (ou "mélanger") par-dessus une autre couleur bg?

Nous connaissons également la couleur de la police afin de savoir quels pixels sont complètement opaques.

Était-ce utile?

La solution

Chaque pixel de l'image correspond à la couleur d'arrière-plan, à la couleur de la police ou à un mélange des deux. Vous pouvez donc spécifier l’ensemble de l’image avec les valeurs RVB d’arrière-plan, les valeurs RVB de la police et un tableau de valeurs compris entre 0 et 1, où, par exemple, 0 signifie que le pixel est la couleur d’arrière-plan, 1 signifie que le pixel est la couleur de la police. Une valeur telle que 0,1 signifie que le pixel est principalement une couleur de fond avec un peu de couleur de police, etc.

Une expression du type:

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

vous donnera ces valeurs pour n’importe quel pixel de l’image. Pour construire les nouvelles valeurs RVB en utilisant une nouvelle couleur d'arrière-plan, vous utilisez cette valeur pour mélanger la couleur de police avec la nouvelle couleur d'arrière-plan.

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top