我在Ubuntu 12.04上使用pycairo(实际上是cairocffi)。 系统上的库是cairo 1.10。 我创建了一个空的ImageSurface,具有ARGB32格式。 例如,如果我尝试填充半透明的白色矩形(RGBA(1,1,1,0.5)),我会看到一个半透明的灰色矩形。
对于在半透明背景上绘制的每个半透明像素,这是相同的:似乎cairo认为与透明像素混合与混合黑色像素是一回事...... 同样的问题适用于在透明表面上绘制的抗锯齿形状:它们具有黑暗的意外边界。
没有任何参考此行为,无处可去。所以我想知道,这是cairo的预期行为吗?我该如何解决这个问题?
答案 0 :(得分:2)
我终于找到了cairo和糟糕的alpha混合有什么问题。 开罗支持ARGB32表面,但仅支持预乘alpha。 也就是说,像素的每个分量都与alpha分量一起预先存储。
我还没有在互联网上找到答案,我认为预乘alpha不适合我正在做的操作类型。 我切换到PyQt4,使用了没有预乘的ARGB32图像,它就像一个魅力。
我也试过使用PyQt4预乘alpha图像,并重现了这个问题。