2011-04-10 102 views
2

我想創建一個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不能預乘色彩通道?

回答

0

我結束了使用QImages並通過最小化我調用的QGLWidget :: bindTextures的數量來優化我的代碼。我仍然沒有收到令人滿意的答覆,說明預乘QPixmaps如何用作半透明紋理,但我對我的程序性能感到滿意,並且不再檢查此線程。