Mar*_*som 34
摘自您获得图像的维基百科文章:

转换为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)