如何混合两个ARGB像素?
实施例
这里A是(带有Alpha的红色),B是(带有Alpha的蓝色)。
答案 0 :(得分:32)
取自您获得图像的维基百科文章:
转换为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)
答案 1 :(得分:2)
看起来这就是你想要的:http://en.wikipedia.org/wiki/Alpha_compositing#Alpha_blending,但我对你的符号感到有些困惑,因为维基百科说argb的值应该在0.0到1.0之间。所以我不认为这个公式会给你FA = 19。你能说清楚吗?
编辑:既然您已经开始了关于FA = 19的业务,我倾向于采用这个公式。
答案 2 :(得分:1)
以上是错误的算法。 可以通过替换aA = 0来验证这一点。然后证明,如果您尝试将颜色B与完全透明的颜色A(即不可见)混合,则逻辑上颜色B保持不变,但是根据此公式,它将更改。 The result of incorrect blending with gradient transparency. 因此,正确的解决方案将是这样的:
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