限制qpainter在pixmap上的图形

Restrict drawing of qpainter over pixmap

本文关键字:图形 pixmap qpainter 限制      更新时间:2023-10-16

我正在使用qgraphicsview和场景,其中设置了两个qgraphicspixmap项目。一个正在显示一些图像,另一个图像具有透明的像素图,用于显示标记。

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

我正在使用QPEN的两个点之间的绘制线,其圆形点有一些笔尺寸。

问题是:

如果我加载了一些png图像,而图像的某些部分是透明的,我想在图像的透明区域上禁用标记(在标记pixmap上(。有什么方法可以自动限制qpainter的标记区域?

将两个pixmap组合到单个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,则使用使用笔颜色"设置"的位绘制。如果背景模式为qt :: opaquemode,则使用背景刷子的颜色绘制" Unset"位;如果背景模式为qt :: xtraparentMode,则" Unset"位是透明的。不支持带有梯度或纹理颜色的绘制位图。

(如果这尊重CoptionMode,则需要尝试。(