如何混合两个 ARGB 像素?
例子
这里 A 是(带 Alpha 的红色),B 是(带 Alpha 的蓝色)。
取自您获得图像的同一篇 Wikipedia 文章:
转换为 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)
以上是错误的算法。这可以通过代入 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
看起来这就是你想要的:http ://en.wikipedia.org/wiki/Alpha_compositing#Alpha_blending ,但我对你的符号有点困惑,因为维基百科说 argb 值应该在 0.0 到 1.0 之间。所以我不认为这个公式会给你 FA=19。你能澄清一下吗?
编辑:既然你把 FA=19 的业务拿掉了,我倾向于使用那个公式。