如何创建QPixmap的半透明副本

How can I create a translucent copy of a QPixmap?

本文关键字:QPixmap 半透明 副本 创建 何创建      更新时间:2023-10-16

在我正在制作的程序中,我需要两个图像,它们完全相同,但其中一个是半透明的。出于性能原因,我想创建两个单独的QPixmaps,而不是只使用一个并设置QPainter的不透明度。有没有一种简单的方法可以做到这一点?

不,没有性能方法可以做到这一点。

要修改QPixmap的通道,必须:转换为QImage,修改,转换回QPixmap。根据您的应用程序,往返行程可能会使在QPainter中执行此操作变得更简单:http://www.qtcentre.org/threads/51158-setting-QPixmap-s-alpha-channel

然而,如果你能把这一点纳入你的启动时间,那么往返可能是合理的,可以防止QPainter中的重复转换。

  1. 将您的QPixmap转换为QImage:http://doc.qt.io/qt-5/qpixmap.html#toImage
  2. 如果您的QPixmap中没有alpha通道,则需要添加一个:http://doc.qt.io/qt-5/qimage.html#convertToFormat
  3. 然后,对于图像中的每个像素,调用setPixel:http://doc.qt.io/qt-5/qimage.html#pixel-操作(请注意,setPixel采用QRgb。您需要从要修改的像素中获取红色、绿色和蓝色通道,并将它们与qRgba中所需的alpha值一起使用:http://doc.qt.io/qt-5/qcolor.html#qRgba)
  4. 最后,您需要使用convertFromImage:http://doc.qt.io/qt-5/qpixmap.html#convertFromImage

也许你应该读一下这个例子。我认为你需要使用构图模式来达到这个目的。