3

我在 Ubuntu 12.04 上使用 pycairo(实际上是 cairocffi)。系统上的库是 cairo 1.10。我创建了一个空的 ImageSurface,具有 ARGB32 格式。例如,如果我尝试填充一个半透明的白色矩形 (RGBA(1,1,1,0.5)),我会看到一个半透明的灰色矩形。

这对于在半透明背景上绘制的每个半透明像素都是一样的:似乎 cairo 认为与透明像素混合与与黑色像素混合是一样的......同样的问题适用于绘制的抗锯齿形状透明表面:它们有黑色的意想不到的边界。

没有提到这种行为,无处可去。所以我想知道,这是 cairo 的预期行为吗?我怎样才能解决这个问题 ?

4

1 回答 1

2

我终于发现了 cairo 和糟糕的 alpha 混合有什么问题。Cairo 支持 ARGB32 表面,但仅支持预乘 alpha。也就是说,像素的每个分量都与 alpha 分量相乘后存储。

我还没有在互联网上找到答案,我认为预乘 alpha 不适合我正在做的操作类型。我切换到 PyQt4,使用没有预乘的 ARGB32 图像,它就像一个魅力。

我还尝试了 PyQt4 预乘 alpha 图像,并重现了该问题。

于 2013-01-25T11:54:59.787 回答