我想创建一个 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)再次与颜色通道相乘,所以阿尔法乘以两次。
如果我使用格式为 QtGui.QImage.Format_ARGB32 的 QImage 代替 QPixmap,则不会预乘颜色通道并且仅应用一次 alpha。但是,这在渲染过程中太慢了。我尝试使用上述格式绘制 QImages,然后转换为 QPixmaps,但得到了相同的结果(预乘颜色通道再次乘以 alpha 通道)。奇趣科技的文档说,
根据系统,QPixmap 使用 RGB32 或预乘 alpha 格式存储。如果图像具有 alpha 通道,并且系统允许,则首选格式是预乘 alpha。
我正在使用 X (Linux)。当 QPixmap 具有 alpha 通道时,有什么方法可以强制 QPixmap 不预乘颜色通道?