限制qpainter在pixmap上的图形
Restrict drawing of qpainter over pixmap
我正在使用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,则需要尝试。(
相关文章:
- C++图形类指针混淆
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 如何在内核C++中使用1920x1080x16M图形或类似的16M颜色?(VGA)
- 这是实现图形的坏方法吗
- 打印 ONNXRUNTIME::图形没有模型
- 提升如何在图形可视化中写入边缘的权重?
- Doxygen - 如何在不生成图形的情况下生成文本调用关系结果
- C++ 中的图形菜单
- 将图形属性与 std::unique_ptr 捆绑在一起
- 从流到邻接列表的向量读取图形
- 替代在python中制作邻接列表与图形问题的字典?(如 C++ 中的 vector<vector<int&g
- 将图形表示为unordered_map<字符串、向量>时拓扑排序错误<string>
- 直接显示手动图形内存泄漏
- Directx 12 :在两个进程之间共享图形内存
- Microsoft C++ 用于图形 API 的 Rest SDK
- 如何将到达图形视图右侧(末端)的QGraphicsPixmapItem移动到左侧(开始)侧(就像在贪吃蛇游戏中发生的事情
- 图形初学者C++(跳过控制台)?
- 在 cpp 中最简单的图形实现
- 提升图形库:资源受限的最短周期
- 限制qpainter在pixmap上的图形