Qt的QPainter::CompositionMode提供了多种图像叠加的模式。常见的有QPainter::CompositionMode_SourceOver, QPainter::CompositionMode_SourceAtop,

QPainter::CompositionMode_DestinationOver和QPainter::CompositionMode_DestinationAtop。现在逐个描述这四种模式的效果。

从http://www.tuicool.com/articles/NF3qIb下载了两幅尺寸相等图片:

现在用第一幅图片做掩盖,与第二幅图片合成

1)QPainter::CompositionMode_DestinationOver

  1. #include "mainwindow.h"
  2. #include <QMessageBox>
  3. #include <QFileDialog>
  4. #include <QPainter>
  5. #include <QPaintEvent>
  6. MainWindow::MainWindow(QWidget *parent)
  7. : QMainWindow(parent)
  8. {
  9. QString filename;
  10. filename=QFileDialog::getOpenFileName(this,
  11. tr("选择图像"),
  12. "",
  13. tr("Images (*.png *.bmp *.jpg *.tif *.GIF )"));
  14. if(filename.isEmpty())
  15. {
  16. return;
  17. }
  18. else
  19. {
  20. if(! ( m_img.load(filename) ) ) //加载图像
  21. {
  22. QMessageBox::information(this,
  23. tr("打开图像失败"),
  24. tr("打开图像失败!"));
  25. return;
  26. }
  27. m_img.load(filename);
  28. }
  29. filename=QFileDialog::getOpenFileName(this,
  30. tr("选择mask"),
  31. "",
  32. tr("Images (*.png *.bmp *.jpg *.tif *.GIF )"));
  33. if(filename.isEmpty())
  34. {
  35. return;
  36. }
  37. else
  38. {
  39. if(! ( m_mask.load(filename) ) ) //加载图像
  40. {
  41. QMessageBox::information(this,
  42. tr("打开图像失败"),
  43. tr("打开图像失败!"));
  44. return;
  45. }
  46. m_mask.load(filename);
  47. }
  48. }
  49. MainWindow::~MainWindow()
  50. {
  51. }
  52. void MainWindow::paintEvent(QPaintEvent *e)
  53. {
  54. QImage * newImage = new QImage(m_img);
  55. QImage * mask = new QImage(m_mask);
  56. QPainter painter;
  57. painter.begin(mask);
  58. painter.setCompositionMode(QPainter::CompositionMode_DestinationOver);
  59. painter.drawImage(0, 0, * newImage);
  60. painter.end();
  61. painter.begin(this);
  62. painter.drawImage(e->rect(), * mask);
  63. painter.end();
  64. delete mask;
  65. delete newImage;
  66. }

注: m_mask和m_img都是QImage类型的变量,也是MainWindow类的成员。一个代表掩盖图,一个代表花瓶图。运行程序时,MainWindow的构造函数会先询问哪一个文件是被遮挡的花瓶图。你选定之后,MainWindow会再次询问哪一个是掩盖图。选定之后,程序自动调用paintEvent,把两个图合成。

效果:

2)CompositionMode_DestinationAtop

将painter.setCompositionMode(QPainter::CompositionMode_DestinationOver)一句改为painter.setCompositionMode(QPainter::CompositionMode_DestinationAtop)即可。

效果和1)相同。

3)CompositionMode_SourceAtop


将painter.setCompositionMode(QPainter::CompositionMode_DestinationOver)一句改为painter.setCompositionMode(QPainter::CompositionMode_SourceAtop)即可。

效果:

4)CompositionMode_SourceOver。遮盖不起作用。

Qt的四个常见的图像叠加模式的更多相关文章

  1. 学习 opencv---(3) ROI 区域图像叠加&初级图像混合

    在这篇文章里,我们一起学习了在OpenCV中如何定义感兴趣区域ROI,如何使用addWeighted函数进行图像混合操作,以及将ROI和addWeighted函数结合起来使用,对指定区域进行图像混合操 ...

  2. 四种简单的图像显著性区域特征提取方法-----AC/HC/LC/FT。

    四种简单的图像显著性区域特征提取方法-----> AC/HC/LC/FT. 分类: 图像处理 2014-08-03 12:40 4088人阅读 评论(4) 收藏 举报 salient regio ...

  3. 四种常见的App弹窗设计,你有仔细注意观察吗?

    弹窗又称为对话框,是App与用户进行交互的常见方式之一.弹窗分为模态弹窗和非模态弹窗两种,两者的区别在于需不需要用户对其进行回应.模态弹窗会打断用户的正常操作,要求用户必须对其进行回应,否则不能继续其 ...

  4. Atitti 图像处理 图像混合 图像叠加 blend 原理与实现

    Atitti 图像处理 图像混合 图像叠加 blend 原理与实现 混合模式 编辑 本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 混合模式是图像处理技术中的一个技术名词,不 ...

  5. X-Cart 学习笔记(四)常见操作

    目录 X-Cart 学习笔记(一)了解和安装X-Cart X-Cart 学习笔记(二)X-Cart框架1 X-Cart 学习笔记(三)X-Cart框架2 X-Cart 学习笔记(四)常见操作 五.常见 ...

  6. (转)四种常见的 POST 提交数据方式

    四种常见的 POST 提交数据方式(转自:https://imququ.com/post/four-ways-to-post-data-in-http.html) HTTP/1.1 协议规定的 HTT ...

  7. [OpenCV] 4、图像叠加 addWeighted

    >_<" 这次主要是图像叠加的基本操作: >_<" cv::addWeighted(imageROI, 1.0, logo, 0.6, 0, imageRO ...

  8. Fedora安装qt总结四种方法

    在fedora上安装qt有四种方法,本人由于初次接触fedora,所以还是耐心的把三个方法都测试了一遍. 1.  下载源码,手动编译,选择路径安装,请参考<fedora15下搭建QT开发环境及编 ...

  9. 四种常见的提示弹出框(success,warning,error,loading)原生JavaScript和jQuery分别实现

    原文:四种常见的提示弹出框(success,warning,error,loading)原生JavaScript和jQuery分别实现 虽然说现在官方的自带插件已经有很多了,但是有时候往往不能满足我们 ...

随机推荐

  1. yii---定义全局函数

    YII它不像Thinkphp等框架一样,已经有全局函数,YII要使用全局函数需要自己去定义,然后在入口文件中进行引入: 例如:我们看 yii 的入口文件: 看到这里,我们看到有个 autoload.p ...

  2. Django---应用如何创建

    创建好的项目之后,需要创建各个应用模块: 创建方法: 就可以看到:index 应用

  3. 9.13Django ORM那些事

    2018-9-13 14:23:22 ORM那些事  参考 : https://www.cnblogs.com/liwenzhou/p/8660826.html 今天的都是ORM的查询 更详细进阶了! ...

  4. 慕课网,vue高仿饿了吗ASP源码视频笔记

    1.源码笔记 我的源码+笔记(很重要):http://pan.baidu.com/s/1geI4i2Z 感谢麦子学院项目相关视频 2.参考资料 Vue.js官网(https://vuejs.org.c ...

  5. POJ-1189 钉子和小球(动态规划)

    钉子和小球 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7452 Accepted: 2262 Description 有一个 ...

  6. 拓扑_dfs——找最小环

    今天在题库发现了一个wa了很久还没调过的题,这个题呢是2015年noip的day1t2,莫名感觉难度上升(其实水的一匹). 这道题输出是3,其实就是一个图中让你找最小环,尽管我不会找环,但是要是我的话 ...

  7. 解决重启服务器以后Nginx无法启动

    今天重启服务器以后发现nginx服务器启动失败. 这应该是因为把nginx进程杀死后pid丢失了,下一次再开启nginx -s reload时无法启动,重装可以解决这个问题,但是太麻烦了. 然后这样就 ...

  8. 【生产问题】LDF丢失

    参考 : https://www.cnblogs.com/gered/p/9450622.html CREATE DATABASE db_logs ON PRIMARY ( NAME % ) LOG ...

  9. ssh stricthostkeychecking=0

    SSH 公钥检查是一个重要的安全机制,可以防范中间人劫持等黑客攻击. 但是在特定情况下,严格的 SSH 公钥检查会破坏一些依赖 SSH 协议的自动化任务,就需要一种手段能够绕过 SSH 的公钥检查. ...

  10. 帝国cms调用缩略图和具体文章的方法

    我们在用帝国cms建站的时候经常会在首页或者分类页等调用一些文章,如果文章带有展示图也把图片调用出来.帝国cms调用缩略图和具体文章怎么操作呢?我们用帝国cms的灵动标签[e:loop],只要记住常用 ...