Я хотел бы создать QPixmap для рисования с помощью QPainter. QPixmap должен поддерживать прозрачность без использования предварительно умноженных цветовых каналов.
В настоящее время я делаю это, создавая QPixmap с желаемыми размерами и заполняя его QColor, который был установлен на ноль для каждого канала (включая альфа-канал).
tex = QtGui.QPixmap(width, height)
c = QtGui.QColor(0)
c.setAlpha(0)
tex.fill(c)
Это добавляет прозрачности QPixmap. Однако, если я рисую в QPixmap с помощью QPainter, нарисованные значения цвета предварительно умножаются на альфа-значение источника. Я не хочу этого, потому что QPixmap позже используется в качестве текстуры в QGLWidget и при рендеринге альфа-канала QPixmap (теперь альфа источника, который был нарисован с помощью QPainter) снова умножается на цветовые каналы, поэтому что альфа умножается дважды.
Если я использую QImage с форматом QtGui.QImage.Format_ARGB32 вместо QPixmap, то цветовые каналы не умножаются предварительно и альфа применяется только один раз. Однако это слишком медленно во время рендеринга. Я попытался нарисовать QImages в указанном выше формате, а затем преобразовать в QPixmaps, но получил тот же результат (предварительно умноженные цветовые каналы снова умножаются на альфа-канал). Документы Trolltech говорят,
В зависимости от системы QPixmap сохраняется с использованием формата RGB32 или предварительно умноженного альфа-канала. Если изображение имеет альфа-канал и если это позволяет система, предпочтительным форматом является альфа-канал с предварительным умножением.
Я использую X (Linux). Есть ли способ заставить QPixmap не умножать цветовые каналы, когда этот QPixmap имеет альфа-канал?