Graphics 如何混合两个ARGB像素?

Graphics 如何混合两个ARGB像素?,graphics,alpha,rgba,Graphics,Alpha,Rgba,如何混合两个ARGB像素 范例 这里A是(红色加上Alpha)B是(蓝色加上Alpha)。看起来这就是你想要的:,但我对你的符号有点困惑,因为维基百科说argb值应该在0.0到1.0之间。所以我认为这个公式不会给出FA=19。你能澄清一下吗 编辑:既然你把FA=19的内容拿出来了,我倾向于使用这个公式。摘自同一篇维基百科文章,你在那里得到了图片: 转换为0到255之间的值: rOut = (rA * aA / 255) + (rB * aB * (255 - aA) / (255*255))

如何混合两个ARGB像素

范例


这里A是(红色加上Alpha)B是(蓝色加上Alpha)。

看起来这就是你想要的:,但我对你的符号有点困惑,因为维基百科说argb值应该在0.0到1.0之间。所以我认为这个公式不会给出FA=19。你能澄清一下吗


编辑:既然你把FA=19的内容拿出来了,我倾向于使用这个公式。

摘自同一篇维基百科文章,你在那里得到了图片:

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

这可能会给你一些线索,虽然它是RGB而不是ARGB,但概念是相似的。嗨,为什么FA=19?还有,你指的是什么类型的“混合”?像这样的@o、 k.w这是完全不同的。@Sunny,是的,我知道它为什么不同。FA=19让我困惑。对于FA,他指的是最终的alpha通道(透明度)。你也可以对RGB组件使用0到255的值;如果需要使用这些值来计算某些内容,那么最好使用0到255之间的值。但是,该公式可以更改为使用0到255之间的值。我认为该公式要求每个值都是一个百分比,因此您可以使用0.0-1.0作为公式,然后再乘以255。感谢danben,我会注意将此公式从(0到1.0)转换为(0到255)。我认为在邮寄时,公式可能是错误的。从现在的文章来看,您仍然需要除以混合alpha。用类似TEX的表示法:
C_o=\frac{C_a\alpha_a+C_b\alpha_b(1-\alpha_a)}{\alpha_a+\alpha_b(1-\alpha_a)}
@Calculuswhiz我不知道你在说什么。最初的公式是由维基媒体托管的图像,它仍然和我发布它的那天一样有效。您的编辑是相同的公式,如果不是相同的图像。使用alpha时,除以alpha是一个单独的步骤,如果上一次混合的下方是100%不透明的对象,则实际上不需要。是的,编辑仅用于在黑暗主题上的可见性。GoogleCharts API制作的图像比原始图像更清晰。我没有试图改变公式,因为我觉得这可能与该职位的意图相冲突。但是,您的回答说图像来自Wiki文章。文章不再使用该图像。我在文章中能找到的最接近的公式都使用alpha除法。除非除了这篇文章还有别的文章@这几乎可以肯定是我正在看的那一页。我从来没有想到维基百科的页面会随着时间的推移而变得不稳定。除以alpha对我来说似乎是错误的,我不知道为什么维基百科现在包括它。