qt pyqt transparency alpha qpixmap

PyQt: crea QPixmap con canal alfa y canales de color no premultiplicados



transparency alpha (1)

Terminé usando QImages y optimizando mi código al minimizar el número de QGLWidget :: bindTextures que estaba llamando. Todavía no he recibido una respuesta satisfactoria sobre cómo los QPixmaps premultiplicados se pueden usar como texturas semitransparentes, pero estoy satisfecho con el rendimiento de mi programa y ya no revisaré este hilo.

Me gustaría crear un QPixmap para usar QPainter. El QPixmap debe admitir la transparencia sin usar canales de color premultiplicados.

Actualmente hago esto creando un QPixmap con las dimensiones deseadas y llenándolo con un QColor que se ha ajustado a cero para cada canal (incluyendo alfa).

tex = QtGui.QPixmap(width, height) c = QtGui.QColor(0) c.setAlpha(0) tex.fill(c)

Esto agrega transparencia al QPixmap. Sin embargo, si dibujo a QPixmap usando un QPainter, los valores de color dibujados se premultiplican por el valor alfa de la fuente. No quiero esto porque el QPixmap se usa más tarde como una textura en un QGLWidget y al renderizar el canal alfa del QPixmap (ahora el alfa de la fuente que se dibujó usando el QPainter) se vuelve a multiplicar contra los canales de color, por lo que que el alfa se multiplica dos veces.

Si utilizo una QImage con formato QtGui.QImage.Format_ARGB32 en lugar de QPixmap, los canales de color no se premultiplican y la alfa se aplica solo una vez. Sin embargo, esto es demasiado lento durante la renderización. Intenté dibujar en QImages con el formato anterior y luego convertir a QPixmaps, pero obtuve el mismo resultado (los canales de color premultiplicados nuevamente se multiplican por el canal alfa). Los doctores de Trolltech dicen,

Dependiendo del sistema, QPixmap se almacena utilizando un RGB32 o un formato alfa premultiplicado. Si la imagen tiene un canal alfa, y si el sistema lo permite, el formato preferido es Premultiplicado alfa.

Estoy usando X (Linux). ¿Hay alguna manera de forzar un QPixmap para no premultiplicar los canales de color cuando ese QPixmap tiene un canal alfa?