如何混合两个ARGB像素?

Sun*_*hah 14 puzzle graphics

如何混合两个ARGB像素?

来源:en.wikipedia.org/wiki/Alpha_compositing#mediaviewer/File:Alpha_compositing.svg

这里A是(带有Alpha的红色),B是(带有Alpha的蓝色).

Mar*_*som 34

摘自您获得图像的维基百科文章:

C_o = C_a\alpha_a + C_b\alpha_b\left(1  - \alpha_a\right)

转换为0到255之间的值:

rOut = (rA * aA / 255) + (rB * aB * (255 - aA) / (255*255))
gOut = (gA * aA / 255) + (gB * aB * (255 - aA) / (255*255))
bOut = (bA * aA / 255) + (bB * aB * (255 - aA) / (255*255))
aOut = aA + (aB * (255 - aA) / 255)
Run Code Online (Sandbox Code Playgroud)


Nik*_*mko 12

以上是错误的算法。这可以通过代入 aA = 0 来验证。事实证明,如果您尝试将颜色 B 与完全透明的颜色 A(即不可见)混合,那么逻辑上颜色 B 保持不变,但根据此公式,它会发生变化。 与渐变透明度不正确混合的结果。 因此,正确的解决方案是这样的:

aOut = aA + (aB * (255 - aA) / 255)
rOut = (rA * aA + rB * aB * (255 - aA) / 255)/aOut 
gOut = (gA * aA + gB * aB * (255 - aA) / 255)/aOut 
bOut = (bA * aA + bB * aB * (255 - aA) / 255)/aOut 
Run Code Online (Sandbox Code Playgroud)

与渐变透明度正确混合的结果。