【问题标题】:How to change the background of an image with transparent pixels?如何使用透明像素更改图像的背景?
【发布时间】:2010-11-27 05:49:01
【问题描述】:

确切的背景颜色是已知的。

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

那么.. 如何从像素中提取颜色的“非背景”部分,然后将其添加(或“混合”)到另一种背景颜色之上?

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

【问题讨论】:

  • 答案似乎取决于语言以及您希望如何进行更改。例如,您想在下载到页面后立即对其进行实时更改吗?还是只使用 Photoshop 并更改一次?在我的 WPF 应用程序中,背景是否会根据应用程序的感觉而改变(没有错误,它是绿色的,很多错误,愤怒的红色 :)

标签: language-agnostic graphics background-color antialiasing


【解决方案1】:

图像中的每个像素要么是背景颜色、字体颜色,要么是两者的混合。因此,您可以使用背景 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

【讨论】:

    猜你喜欢
    • 2017-06-06
    • 2012-09-18
    • 2021-10-08
    • 1970-01-01
    • 2016-12-08
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    相关资源
    最近更新 更多