【问题标题】:Restrict drawing of qpainter over pixmap限制 qpainter 在 pixmap 上的绘制
【发布时间】:2017-04-17 12:45:11
【问题描述】:

我正在使用设置了两个 QGraphicsPixmap 项的 QGraphicsView 和 Scene。 一个是显示一些图像,另一个是具有用于显示标记的透明像素图。

我正在使用 qpainter 绘制透明 qpixmap。

我在两点之间使用画线,qpen 有圆点和一些笔大小。

问题是:

如果我加载一些 png 图像,并且图像的某些部分是透明的,我想在图像的透明区域上禁用标记(在标记 pixmap 上)。 有没有办法自动限制qpainter的标记区域?

【问题讨论】:

    标签: c++ qt qpainter qpixmap


    【解决方案1】:

    将两个像素图组合成一个QGraphicsPixmapItem 是最简单的。然后你可以简单地使用正确的QPainter::CompositionMode,这需要

    QPainter::CompositionMode_SourceAtop

    源像素混合在目标之上,源像素的 alpha 减少了目标像素的 alpha。

    例如:

    QPixmap markingPixmap(sourceImage.size());
    markingPixmap.fill(Qt::transparent);
    
    { // scope for painter1
        QPainter painter1(&markingPixmap);
        painter1.setPen(...);
        painter1.drawLine(...);
    }
    
    QPainter painter(&sourceImage);
    painter.setCompositionMode(QPainter::CompositionMode_SourceAtop);
    painter.drawPixmap(0, 0, markingPixmap);
    

    (代码未经测试!)


    或者你甚至可以使用QBitmap,参见QPainter::drawPixmap()

    如果 pixmap 是 QBitmap,它是使用使用笔颜色“设置”的位绘制的。如果 backgroundMode 是 Qt::OpaqueMode,则使用背景画笔的颜色绘制“未设置”位;如果 backgroundMode 是 Qt::TransparentMode,“未设置”位是透明的。不支持使用渐变或纹理颜色绘制位图。

    (如果这符合 CompositionMode,您需要尝试。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-09
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多