如何创建QPixmap的半透明副本?

时间:2015-06-03 18:24:01

标签: c++ windows qt qpixmap

在我正在制作的节目中,我需要两张完全相同的图像,但其中一张是半透明的。出于性能原因,我想创建两个单独的QPixmaps而不是仅使用一个并设置QPainter的不透明度。有这么简单的方法吗?

2 个答案:

答案 0 :(得分:0)

也许你应该阅读this example。我认为您需要使用the composition mode来实现此目的。

答案 1 :(得分:0)

不,没有高效的方法可以做到这一点。

要修改QPixmap的频道,必须:转换为QImage,修改后,转换回QPixmap。根据您的申请,往返可能会更简单地在QPainter中执行此操作:http://www.qtcentre.org/threads/51158-setting-QPixmap-s-alpha-channel

但是,如果您可以将其转换为启动时间,则往返可能是合理的,从而阻止了QPainter中的重复转换。

  1. 将您的QPixmap转换为QImagehttp://doc.qt.io/qt-5/qpixmap.html#toImage
  2. 如果您在QPixmap中没有Alpha通道,则需要添加一个:http://doc.qt.io/qt-5/qimage.html#convertToFormat
  3. 然后,对于图片中的每个像素,请致电setPixelhttp://doc.qt.io/qt-5/qimage.html#pixel-manipulation(请注意,setPixel需要QRgb。您需要获得红色,绿色,以及要修改的像素中的蓝色通道,并将其与qRgba中所需的Alpha值一起使用:http://doc.qt.io/qt-5/qcolor.html#qRgba
  4. 最后,您需要使用convertFromImagehttp://doc.qt.io/qt-5/qpixmap.html#convertFromImage