如何alpha混合工作,数学,逐像素?(How does alpha blending work,

2019-06-24 20:45发布

好像它并不是这么简单,RGB1 * A1 + RGB2 * A2 ......怎么都值修剪? 加权? 等等。

而且这是依赖于上下文的问题吗? 是否有不同的算法,产生不同的结果? 或一个标准执行?

我在特定的OpenGL的答案特别感兴趣,但是从其他环境方面是有用的。

Answer 1:

我不知道OpenGL的,但不透明度的一个像素通常是在像这样的其他像素得出:

result.r = background.r * (1 - A) + foreground.r * A
result.g = background.g * (1 - A) + foreground.g * A
result.b = background.b * (1 - A) + foreground.b * A

重复此操作的多个像素。



Answer 2:

以上回答工作,如果图像不预乘alpha。 但是,如果您使用该类型具有预乘alpha的图像融合的,会有一个黑色边框。

预乘alpha:

当创建图像,颜色值由alpha通道相乘。 看看这一个像素的例子:

Pixel: r = 1, g = 0, b = 0, a = 0.5

当它的保存,将RGB瓦莱斯将由alpha值给予相乘:

Pixel: r = 0.5, g = 0, b = 0, a = 0.5

融入这种形象你需要使用下面的公式:

result.r = background.r * (1 - A) + foreground.r
result.g = background.g * (1 - A) + foreground.g
result.b = background.b * (1 - A) + foreground.b

非预乘alpha

在这个例子中,α通道是完全分开的颜色通道。

Pixel: r = 1, g = 0, b = 0, a = 0.5

当它保存:

Pixel: r = 1, g = 0, b = 0, a = 0.5

一样的。 在这种情况下,由MiniTech移动提供的答案是正确的。

更多详细信息可以在这里找到: 预乘alpha



文章来源: How does alpha blending work, mathematically, pixel-by-pixel?