我想創建一個QPixmap來繪製使用QPainter。 QPixmap應該支持透明度,而不使用預乘顏色通道。PyQt:用Alpha通道創建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是乘以兩次。
如果我使用格式爲QtGui.QImage.Format_ARGB32的QImage代替QPixmap,那麼顏色通道不是預乘,而且alpha只應用一次。但是在渲染過程中這太慢了。我試圖用上面的格式繪製QImages,然後轉換爲QPixmaps,但得到了相同的結果(預乘的顏色通道再次乘以alpha通道)。 Trolltech的文檔說,
根據不同的系統,QPixmap的是 採用RGB32或 預乘alpha的格式存儲。如果 圖像具有Alpha通道,並且系統允許,則首選格式爲 預乘alpha。
我正在使用X(Linux)。當QPixmap有一個alpha通道時,有沒有辦法強制QPixmap不能預乘色彩通道?