限制在pixmap上绘制qpainter

时间:2017-04-17 12:45:12

标签: c++ qt qpainter qpixmap

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

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

我在两个点​​之间使用画线,其中qpen具有圆角点和一些笔尺寸。

问题是:

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

1 个答案:

答案 0 :(得分:1)

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

<强> QPainter::CompositionMode_SourceAtop

  

源像素在目标顶部混合,源像素的alpha减去目标像素的alpha值。

e.g:

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,则使用&#34; set&#34;使用笔的颜色。如果backgroundMode是Qt :: OpaqueMode,则&#34;取消设置&#34;使用背景画笔的颜色绘制位;如果backgroundMode是Qt :: TransparentMode,则&#34;取消设置&#34;位是透明的。不支持使用渐变或纹理颜色绘制位图。

(如果这尊重CompositionMode,你需要尝试。)