PyQt: 如何创建带有 alpha 通道和未预乘颜色通道的 QPixmap?

3
我想创建一个QPixmap并使用QPainter进行绘制。这个QPixmap应该支持透明度,而不需要使用预乘的颜色通道。
目前,我会通过创建一个具有所需尺寸的QPixmap,并用每个通道(包括alpha)设置为零的QColor填充来实现这一点。
tex = QtGui.QPixmap(width, height)
c = QtGui.QColor(0)
c.setAlpha(0)
tex.fill(c)

这将为QPixmap添加透明度。然而,如果我使用QPainter绘制到QPixmap上,绘制的颜色值会被源的alpha值预乘。我不想这样做,因为稍后QPixmap将作为纹理在QGLWidget中使用,并且在渲染时,QPixmap的alpha通道(现在是使用QPainter绘制的源的alpha)再次与颜色通道相乘,从而使alpha乘以两倍。
如果我在QPixmap的位置使用格式为QtGui.QImage.Format_ARGB32的QImage,则颜色通道不会被预乘,而alpha仅应用一次。但是,在渲染期间,这太慢了。我尝试使用上述格式在QImages上进行绘制,然后转换为QPixmaps,但得到了相同的结果(预乘的颜色通道再次与alpha通道相乘)。 Trolltech文档说:
根据系统的不同,QPixmap使用RGB32或预乘alpha格式存储。如果图像具有alpha通道,并且系统允许,则首选格式为预乘alpha。
我正在使用X(Linux)。是否有任何方法可以强制QPixmap在具有alpha通道的情况下不预乘颜色通道?
1个回答

0

我最终使用了QImages,并通过最小化我调用的QGLWidget :: bindTextures数量来优化我的代码。 我仍然没有得到关于如何将预乘的QPixmaps用作半透明纹理的令人满意的答案,但我对我的程序性能感到满意,不会再检查此线程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接