【问题标题】:How to draw darkened QPixmap?如何绘制变暗的 QPixmap?
【发布时间】:2018-03-22 18:11:30
【问题描述】:

我正在寻找一种快速有效的方法来使用 QPainter 绘制 QPixmap,但要让 pixmap 看起来比正常更暗。是否有某种滤镜或效果可以在绘制时应用于 QPixmap 或 QPainter 以创建此效果?

【问题讨论】:

  • 您可以在代码中生成第二个像素图,该像素图具有黑色或灰色,并且与您要绘制的像素图的大小完全相同,然后只需使用此深色像素图的 alpha 值即可充当“过滤器”。确保此辅助像素图明显绘制在顶部。

标签: c++ qt qt5 qpainter qpixmap


【解决方案1】:

您在QPixmap 中没有像素访问权限,因此检查像素并将它们变暗是不可能的。

但是,您可以使用透明的黑色画笔填充像素图,并使用多种合成模式来进一步自定义结果。

    QPainter painter(this);
    QPixmap pm("d:/test.jpg");
    painter.drawPixmap(QRect(0, 0, 400, 200), pm);
    painter.translate(0, 200);
    painter.drawPixmap(QRect(0, 0, 400, 200), pm);
    painter.fillRect(QRect(0, 0, 400, 200), QBrush(QColor(0, 0, 0, 200)));

【讨论】:

  • 使用光栅后端,QPixmapQImage 的一个非常薄的包装器。 Pixmap-image 转换本质上是无操作的 :)
  • @KubaOber 我不确定这是不是真的,因为光栅后端 QImage 明显慢于 QPixmap。我已经在 windows 和 linux 中进行了测试。 IIRC 像素图使用平台特定的实现,而图像是 Qt 自己的通用实现。
  • 这已经有近十年的历史了。 Pixmap 根本不使用任何特定于平台的东西。只有当 QImage 的格式绘制效率较低时,它才会比像素图慢。
  • 有可能,我在Qt 5出来之前就测试过了,快十年了。大概 7 年。
  • @Griffort 没有非矩形像素图这样的东西。你的意思是它的视觉表示不是矩形的。在这种情况下,这取决于该表示是如何定义的——如果它是一个 Alpha 通道,您可以使用自定义合成模式。否则,您将不得不使用预定义的模板,它本质上是一个带有 Alpha 通道的黑色图像,可以将其切割成所需的形状。
【解决方案2】:

一些早期的 cmets 会在您的屏幕上留下一个深灰色的矩形。使用合成模式,所有可见的东西都会变暗,但任何透明区域仍然是透明的。

painter.setCompositionMode (QPainter::CompositionMode_DestinationIn);
painter.fillRect (rect, QBrush (QColor (0,0,0,128)));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-22
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多