如何混合2个透明层?

时间:2018-11-15 14:41:56

标签: math alpha alphablending rgba alpha-transparency

例如,我们有2个透明层:第一个是black (0, 0, 0, 0.75),第二个是white (255, 255, 255, 0.64)。我不知道如何融合它们。

但是我知道如何混合一层不透明层和一层透明层。看起来像这样:https://wikimedia.org/api/rest_v1/media/math/render/svg/1e35c32f13d5eedc7ac21e9e566796dd048a31e6

1 个答案:

答案 0 :(得分:1)

假定背景色为(C, 1)(RGB,A),第一层为(A, s),第二层为(B, t)。两次应用混合方程:

C' = t * B + (1-t) * [s * A + (1-s) * C]

     = [t * B + (1-t) * s * A] + (1-t) * (1-s) * C

我们可以看到新的有效混合系数为1 - (1-s) * (1-t)。要获得组合的透明色,请将第一项除以:

r := 1 - (1-s) * (1-t)

D := [t * B + (1-t) * s * A] / r

--> C' = r * D + (1-r) * C

即新的有效透明层由(D, r)赋予。

在您的示例中,值将为D = (179, 179, 179)r = 0.91