如何创建 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
中重复转换。
- 将您的
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 (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)
- 最后你需要使用
convertFromImage
: http://doc.qt.io/qt-5/qpixmap.html#convertFromImage
在我正在制作的程序中,我需要两张完全相同的图像,但其中一张是半透明的。出于性能原因,我想创建两个单独的 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
中重复转换。
- 将您的
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 (Note thatsetPixel
takes aQRgb
. 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 inqRgba
: http://doc.qt.io/qt-5/qcolor.html#qRgba) - 最后你需要使用
convertFromImage
: http://doc.qt.io/qt-5/qpixmap.html#convertFromImage