我正在使用QGraphicsView和Scene,其中设置了两个QGraphicsPixmap项目。 一个是显示一些图像,另一个是透明像素图,用于显示标记。
我正在使用qpainter绘制透明的qpixmap。
我在两个点之间使用画线,其中qpen具有圆角点和一些笔尺寸。
问题是:
如果我加载一些png图像,图像的某些部分是透明的,我想在图像的透明区域上禁用标记(在标记像素图上)。 有没有办法自动限制qpainter的标记区域?
答案 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,你需要尝试。)