【问题标题】:How can I create a translucent copy of a QPixmap?如何创建 QPixmap 的半透明副本?
【发布时间】:2015-06-03 18:24:00
【问题描述】:

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

【问题讨论】:

    标签: c++ windows qt qpixmap


    【解决方案1】:

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

    要修改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(注意setPixel 需要QRgb。您需要从要修改的像素中获取红色、绿色和蓝色通道并在 qRgba:http://doc.qt.io/qt-5/qcolor.html#qRgba 中使用这些以及您想要的 alpha 值)
    4. 最后你需要使用convertFromImage:http://doc.qt.io/qt-5/qpixmap.html#convertFromImage

    【讨论】:

    • 是的,目的是在启动时执行一次,这样我就不必每次需要半透明图像时都这样做。您提供的链接正是我想要的。
    【解决方案2】:

    也许您应该阅读this example。我认为您需要为此使用the composition mode

    【讨论】:

      猜你喜欢
      • 2014-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      相关资源
      最近更新 更多