我在 Ubuntu 12.04 上使用 pycairo(实际上是 cairocffi)。 系统上的库是 cairo 1.10。 我创建了一个空的 ImageSurface,具有 ARGB32 格式。 例如,如果我尝试填充一个半透明的白色矩形 (RGBA(1,1,1,0.5)),我会看到一个半透明的灰色矩形。
这对于在半透明背景上绘制的每个半透明像素都是一样的:cairo 似乎认为与透明像素混合与与黑色像素混合是一回事...... 同样的问题也适用于在透明表面上绘制的抗锯齿形状:它们具有意外的黑色边框。
没有提及此行为,无处可寻。所以我想知道,这是 cairo 的预期行为吗?我该如何解决这个问题?
最佳答案
我终于发现了 cairo 和糟糕的 alpha 混合有什么问题。 Cairo 支持 ARGB32 表面,但只支持预乘 alpha。 也就是说,像素的每个分量都预乘了 alpha 分量进行存储。
我还没有在互联网上找到这个问题的答案,我认为预乘 alpha 不适合我正在做的操作类型。 我切换到 PyQt4,使用没有预乘的 ARGB32 图像,它的效果非常好。
我还尝试使用 PyQt4 预乘 alpha 图像,并重现了该问题。
关于python - 开罗,ImageSurface : Cannot get correct alpha blending,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14514438/