Qt的四个常见的图像叠加模式
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
- #include "mainwindow.h"
- #include <QMessageBox>
- #include <QFileDialog>
- #include <QPainter>
- #include <QPaintEvent>
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- {
- QString filename;
- filename=QFileDialog::getOpenFileName(this,
- tr("选择图像"),
- "",
- tr("Images (*.png *.bmp *.jpg *.tif *.GIF )"));
- if(filename.isEmpty())
- {
- return;
- }
- else
- {
- if(! ( m_img.load(filename) ) ) //加载图像
- {
- QMessageBox::information(this,
- tr("打开图像失败"),
- tr("打开图像失败!"));
- return;
- }
- m_img.load(filename);
- }
- filename=QFileDialog::getOpenFileName(this,
- tr("选择mask"),
- "",
- tr("Images (*.png *.bmp *.jpg *.tif *.GIF )"));
- if(filename.isEmpty())
- {
- return;
- }
- else
- {
- if(! ( m_mask.load(filename) ) ) //加载图像
- {
- QMessageBox::information(this,
- tr("打开图像失败"),
- tr("打开图像失败!"));
- return;
- }
- m_mask.load(filename);
- }
- }
- MainWindow::~MainWindow()
- {
- }
- void MainWindow::paintEvent(QPaintEvent *e)
- {
- QImage * newImage = new QImage(m_img);
- QImage * mask = new QImage(m_mask);
- QPainter painter;
- painter.begin(mask);
- painter.setCompositionMode(QPainter::CompositionMode_DestinationOver);
- painter.drawImage(0, 0, * newImage);
- painter.end();
- painter.begin(this);
- painter.drawImage(e->rect(), * mask);
- painter.end();
- delete mask;
- delete newImage;
- }
注: 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的四个常见的图像叠加模式的更多相关文章
- 学习 opencv---(3) ROI 区域图像叠加&初级图像混合
在这篇文章里,我们一起学习了在OpenCV中如何定义感兴趣区域ROI,如何使用addWeighted函数进行图像混合操作,以及将ROI和addWeighted函数结合起来使用,对指定区域进行图像混合操 ...
- 四种简单的图像显著性区域特征提取方法-----AC/HC/LC/FT。
四种简单的图像显著性区域特征提取方法-----> AC/HC/LC/FT. 分类: 图像处理 2014-08-03 12:40 4088人阅读 评论(4) 收藏 举报 salient regio ...
- 四种常见的App弹窗设计,你有仔细注意观察吗?
弹窗又称为对话框,是App与用户进行交互的常见方式之一.弹窗分为模态弹窗和非模态弹窗两种,两者的区别在于需不需要用户对其进行回应.模态弹窗会打断用户的正常操作,要求用户必须对其进行回应,否则不能继续其 ...
- Atitti 图像处理 图像混合 图像叠加 blend 原理与实现
Atitti 图像处理 图像混合 图像叠加 blend 原理与实现 混合模式 编辑 本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 混合模式是图像处理技术中的一个技术名词,不 ...
- X-Cart 学习笔记(四)常见操作
目录 X-Cart 学习笔记(一)了解和安装X-Cart X-Cart 学习笔记(二)X-Cart框架1 X-Cart 学习笔记(三)X-Cart框架2 X-Cart 学习笔记(四)常见操作 五.常见 ...
- (转)四种常见的 POST 提交数据方式
四种常见的 POST 提交数据方式(转自:https://imququ.com/post/four-ways-to-post-data-in-http.html) HTTP/1.1 协议规定的 HTT ...
- [OpenCV] 4、图像叠加 addWeighted
>_<" 这次主要是图像叠加的基本操作: >_<" cv::addWeighted(imageROI, 1.0, logo, 0.6, 0, imageRO ...
- Fedora安装qt总结四种方法
在fedora上安装qt有四种方法,本人由于初次接触fedora,所以还是耐心的把三个方法都测试了一遍. 1. 下载源码,手动编译,选择路径安装,请参考<fedora15下搭建QT开发环境及编 ...
- 四种常见的提示弹出框(success,warning,error,loading)原生JavaScript和jQuery分别实现
原文:四种常见的提示弹出框(success,warning,error,loading)原生JavaScript和jQuery分别实现 虽然说现在官方的自带插件已经有很多了,但是有时候往往不能满足我们 ...
随机推荐
- redis进程守护脚本
#!/bin/bash redis_dir="/usr/local/redis" redis_conf="/usr/local/redis/redis.conf" ...
- 富文本编辑器TinyMCE
最近项目中用到了javascript富文本编辑器,从网上找开源控件,发现很多可选,参考下面文章,列出了很多可用的插件http://www.cnblogs.com/ywqu/archive/2009/1 ...
- zabbix中文乱码的问题
在使用zabbix时,有时候会出现中文乱码的问题,如下: 因为zabbix自身对中文简体的支持不完善,需要我们手动的去上传新的字体进行替换: 1.在windows获取字体库文件 在Windows上的字 ...
- Linux监控远程端口是否开启脚本
#!/bin/bash #author Liuyueming #date 2017-07-29 #定时检测邦联收单及预付卡系统 pos_num=`nmap 远程IP地址 -p 端口号|sed -n & ...
- android udev
http://www.freesoftwaremagazine.com/articles/drivers_linux http://blog.csdn.net/jianchi88/article/de ...
- Python开发【笔记】:关于子线程(子进程)与主线程(主进程)的关联
前言: 主要分析下面的问题: 主线程启线程 主线程执行完毕,会关闭子线程吗? 子线程启线程 主线程执行完毕,会结束吗? 主进程启动进程,主进程执行完毕,会怎样? 子进程启动进程,进程执行完毕,又会 ...
- 洛谷P2322 最短母串问题 [HNOI2006] AC自动机
正解:AC自动机+最短路 解题报告: 传送门! 这题之前考试考到辣,,,我连题目都没看懂这种傻逼事儿就不要说了QAQ 然后就港正解辣 首先这题可以用dp做?等下写 但是一般来说看到这种,第一反应就,先 ...
- 洛谷P2279 消防局的设立 [HNOI2003] 贪心
正解:贪心 解题报告: 传送门! 这题贪心得挺显然的,,,?居然能有蓝,,,是蓝题太水了嘛,,,? 简单说下,这题一看到就能想到,对最低的没被覆盖到的点给它的祖父建一个消防局 没了? 哦这题实现还挺有 ...
- mysql清空有外键关联的表
第一种:(不要外键约束) 手动删除外键约束: 删除表数据 第二种:(保留外键约束) SET FOREIGN_KEY_CHECKS = 0; TRUNCATE TABLE 表名; SET FORE ...
- windows底下怎么让cmder通过输入subl去打开sublime text
在window自身的cmd或者你安装的cmder中输入 doskey subl="D:\Program Files\sublime3\Sublime Text 3\sublime_text. ...