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

How can I create a translucent copy of a QPixmap?

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

也许您应该为此阅读 this example. I think you will need to use the composition mode

不,没有执行此操作的高效方法。

要修改 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. 然后为图像中的每个像素调用 setPixelhttp://doc.qt.io/qt-5/qimage.html#pixel-manipulation (Note that setPixel takes a QRgb. You'll need to get the red, green, and blue channels from the pixel to be modified and use these along with your desired alpha value in qRgba: http://doc.qt.io/qt-5/qcolor.html#qRgba)
  4. 最后你需要使用 convertFromImage: http://doc.qt.io/qt-5/qpixmap.html#convertFromImage