Language agnostic 如何更改具有透明像素的图像的背景?

Language agnostic 如何更改具有透明像素的图像的背景?,language-agnostic,graphics,background-color,antialiasing,Language Agnostic,Graphics,Background Color,Antialiasing,确切的背景色是已知的 想象一个绿色背景上的抗锯齿字体。现在我们要将图像的背景色更改为红色 所以。。如何从像素中提取颜色的“非背景”部分,然后将其(或“混合”)添加到其他bg颜色的顶部 我们也知道字体颜色,所以我们知道哪些像素是完全不透明的。图像中的每个像素要么是背景色,要么是字体颜色,要么是两者的混合。因此,您可以使用背景RGB值、字体RGB值和介于0和1之间的值数组指定整个图像,其中,0表示像素为背景色,1表示像素为字体色。像0.1这样的值意味着像素主要是背景色,还有一些字体颜色,等等 表达方

确切的背景色是已知的

想象一个绿色背景上的抗锯齿字体。现在我们要将图像的背景色更改为红色

所以。。如何从像素中提取颜色的“非背景”部分,然后将其(或“混合”)添加到其他bg颜色的顶部


我们也知道字体颜色,所以我们知道哪些像素是完全不透明的。

图像中的每个像素要么是背景色,要么是字体颜色,要么是两者的混合。因此,您可以使用背景RGB值、字体RGB值和介于0和1之间的值数组指定整个图像,其中,0表示像素为背景色,1表示像素为字体色。像0.1这样的值意味着像素主要是背景色,还有一些字体颜色,等等

表达方式如下:

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
将为图像中的任何像素提供这些值。要使用新背景色构造新的RGB值,请使用此值将字体颜色与新背景色混合

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

答案似乎取决于语言和你想如何做出改变。例如,是否要在下载到页面后立即对其进行实时更改?还是只使用photoshop并更改一次?在我的WPF应用程序中,背景是否会根据应用程序的感觉而改变(无错误,绿色,大量错误,红色:)