Я хотел бы создать 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 есть альфа-канал?