【发布时间】:2015-06-03 18:24:00
【问题描述】:
在我正在制作的程序中,我需要两张完全相同的图像,但一张是半透明的。出于性能原因,我想创建两个单独的QPixmaps,而不是只使用一个并设置QPainter 的不透明度。有没有一种简单的方法可以做到这一点?
【问题讨论】:
在我正在制作的程序中,我需要两张完全相同的图像,但一张是半透明的。出于性能原因,我想创建两个单独的QPixmaps,而不是只使用一个并设置QPainter 的不透明度。有没有一种简单的方法可以做到这一点?
【问题讨论】:
不,没有执行此操作的高效方法。
要修改QPixmap 的通道,必须:转换为QImage,修改,转换回QPixmap。根据您的应用程序,往返可能会使在QPainter 中执行此操作变得更简单:http://www.qtcentre.org/threads/51158-setting-QPixmap-s-alpha-channel
但是,如果您可以将其纳入您的启动时间,那么往返可能是合理的,可以防止QPainter 中的重复转换。
QPixmap 转换为QImage:http://doc.qt.io/qt-5/qpixmap.html#toImage
QPixmap 中没有 Alpha 通道,您需要添加一个:http://doc.qt.io/qt-5/qimage.html#convertToFormat
setPixel:http://doc.qt.io/qt-5/qimage.html#pixel-manipulation(注意setPixel 需要QRgb。您需要从要修改的像素中获取红色、绿色和蓝色通道并在 qRgba:http://doc.qt.io/qt-5/qcolor.html#qRgba 中使用这些以及您想要的 alpha 值)convertFromImage:http://doc.qt.io/qt-5/qpixmap.html#convertFromImage
【讨论】:
也许您应该阅读this example。我认为您需要为此使用the composition mode。
【讨论】: