我正在使用QGraphicsView和Scene来设置两个QGraphicsPixmap项目。 一个是显示一些图像,另一个是透明像素图,用于显示标记。通过pixmap限制qpainter的绘制
我使用qpainter绘制透明的qpixmap。
我在两点之间用qpen在具有某些笔大小的圆角点上使用了划线。
问题是:
如果我加载某些png图片,用图像是透明的某些部分,我想禁止标记(标上的pixmap)在图像的透明区域中。 有没有办法自动限制qpainter的标记区域?
我正在使用QGraphicsView和Scene来设置两个QGraphicsPixmap项目。 一个是显示一些图像,另一个是透明像素图,用于显示标记。通过pixmap限制qpainter的绘制
我使用qpainter绘制透明的qpixmap。
我在两点之间用qpen在具有某些笔大小的圆角点上使用了划线。
问题是:
如果我加载某些png图片,用图像是透明的某些部分,我想禁止标记(标上的pixmap)在图像的透明区域中。 有没有办法自动限制qpainter的标记区域?
将您的两个像素图合并成一个单一的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,您将需要尝试。)