2017-04-17 61 views
0

我正在使用QGraphicsView和Scene来设置两个QGraphicsPixmap项目。 一个是显示一些图像,另一个是透明像素图,用于显示标记。通过pixmap限制​​qpainter的绘制

我使用qpainter绘制透明的qpixmap。

我在两点之间用qpen在具有某些笔大小的圆角点上使用了划线。

问题是:

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

回答

1

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

QPainter::CompositionMode_SourceAtop

源像素混合在目标之上,与源像素的由阿尔法降低阿尔法目标像素。

例如为:

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()

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

(如果这方面考虑CompositionMode,您将需要尝试。)