python - 开罗,ImageSurface : Cannot get correct alpha blending

标签 python cairo pycairo

我在 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/

相关文章:

python - 安装py2cairo的步骤?

python - 使用 Pango 和 Cairo (Pycairo) 使线条适合宽度

c++ - 'PyCObject_Import ("cairo", "CAPI")' C++ call yields segfault, ' import cairo' 在 python 上有效

Java TCP 服务器在客户端断开连接之前不接收数据包

python - k-means 集群中的项数

python - pyqt5 应用程序中的 matplotlib 工具栏

graphics - 计算具有粗细的线的边界框

python - 使用 Python 读取 UTF8 CSV 文件

c# - 如何使用 Gtk Sharp 和 C# 创建用于在代码中绘图的 Cairo Context

python - 有没有比 Cairo 更好的用 Python 绘制矢量图形的库?