QPainter を使用して描画する QPixmap を作成したいと思います。QPixmap は、あらかじめ乗算されたカラー チャネルを使用せずに透明度をサポートする必要があります。
現在、これを行うには、目的の寸法で QPixmap を作成し、各チャネル (アルファを含む) をゼロに設定した QColor で塗りつぶします。
tex = QtGui.QPixmap(width, height)
c = QtGui.QColor(0)
c.setAlpha(0)
tex.fill(c)
これにより、QPixmap に透明度が追加されます。ただし、QPainter を使用して QPixmap に描画すると、描画された色の値にソースのアルファ値が乗算されます。QPixmap は後で QGLWidget のテクスチャとして使用され、QPixmap のアルファ チャネル (現在は QPainter を使用して描画されたソースのアルファ) をレンダリングすると、カラー チャネルに対して再度乗算されるため、これは必要ありません。つまり、アルファが 2 倍になります。
QPixmap の代わりに QtGui.QImage.Format_ARGB32 形式の QImage を使用すると、カラー チャネルはあらかじめ乗算されず、アルファは 1 回だけ適用されます。ただし、これはレンダリング中に遅すぎます。上記の形式で QImages に描画してから QPixmaps に変換しようとしましたが、同じ結果が得られました (事前に乗算されたカラー チャネルに再びアルファ チャネルが乗算されます)。Trolltechのドキュメントによると、
システムに応じて、QPixmap は RGB32 または事前に乗算されたアルファ形式を使用して保存されます。画像にアルファ チャネルがあり、システムで許可されている場合、優先される形式は乗算済みアルファです。
X (Linux) を使用しています。QPixmap にアルファ チャンネルがある場合、QPixmap がカラー チャンネルを事前乗算しないようにする方法はありますか?