Как сделать QImage или QPixmap полупрозрачным - или почему setAlphaChannel устарел?

4.7 и хотел бы наложить два изображения на qgraphicsview. Изображение сверху должно быть полупрозрачным, чтобы сквозь него было видно. Изначально оба изображения полностью непрозрачны. Я ожидал, что какая-то функция для установки глобального альфа-значения для каждого пикселя будет существовать, но похоже, что такой функции нет. Наиболее близким к нему является QPixmap :: setAlphaChannel (const QPixmap & alphaChannel), который, однако, помечен как устаревший, начиная с Qt-4.6. Вместо этого руководство ссылается на CompositionModes QPainter, но мне не удается добавить прозрачности к непрозрачному изображению, как я хочу. Я ожидал, что какая-то функция для установки глобального альфа-значения для каждого пикселя будет существовать, но похоже, что такой функции нет. Наиболее близким к нему является QPixmap :: setAlphaChannel (const QPixmap & alphaChannel), который, однако, помечен как устаревший, начиная с Qt-4.6. Вместо этого руководство ссылается на CompositionModes QPainter, но мне не удается добавить прозрачности к непрозрачному изображению, как я хочу. Я ожидал, что какая-то функция для установки глобального альфа-значения для каждого пикселя будет существовать, но похоже, что такой функции нет. Наиболее близким к нему является QPixmap :: setAlphaChannel (const QPixmap & alphaChannel), который, однако, помечен как устаревший, начиная с Qt-4.6. Вместо этого руководство ссылается на CompositionModes QPainter, но мне не удается добавить прозрачности к непрозрачному изображению, как я хочу. Может ли кто-нибудь указать мне на рабочий пример или поделиться кодом?

Изменить: Мне почти жаль, что у меня есть собственный ответ, всего через несколько часов после того, как я задал вопрос. Из этой статьи я понял, что следующий код выполняет свою работу. Мне просто интересно, считается ли это «лучше» (что часто переводится как более быстрое), чем изменение альфа-значений по пикселям.

QPainter p; 
p.begin(image);
p.setCompositionMode(QPainter::CompositionMode_DestinationIn);
p.fillRect(image->rect(), QColor(0, 0, 0, 120));
p.end();            
mpGraphicsView->scene()->addPixmap(QPixmap::fromImage(image->mirrored(false,true),0));  

7
задан FFox 13 November 2010 в 16:36
поделиться