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分别实现 虽然说现在官方的自带插件已经有很多了,但是有时候往往不能满足我们 ...
随机推荐
- http模拟登陆及发请求
首先声明下,如果服务端写入的cookie属性是HttpOnly的,程序是不能自动获取cookie的,需要人工登陆网站获取cookie再把cookie写死,如下图所示: http测试工具:http:// ...
- 微信小程序---示例DEMO
转:CSDN的文章: https://blog.csdn.net/rolan1993/article/details/73467867 不错的DEMO: https://github.com/skyv ...
- Java -- 给定一个int数组,拼接出最大数值
public class ZhiJieTiaoDong { /* 给定一个数组:组合成最大数值 */ public String szpj(int[] args){ if(null == args | ...
- mysql跨库联表查询
首先要了解database与instance区别,见<MySQL中的实例.数据库关系简介> 跨库分为同一个instance下的跨库和不同instance下的跨库. 一.同一个MySQL实例 ...
- POJ 1066 - Treasure Hunt - [枚举+判断线段相交]
题目链接:http://poj.org/problem?id=1066 Time Limit: 1000MS Memory Limit: 10000K Description Archeologist ...
- Oracle安装部署之linux OS install oracle database安装脚本
#!/bin/bash#Purpose:Create and config oracle install.#Usage:Log on as the superuser('root') #1.creat ...
- AudioUnit录音并同步播放时遇到的问题
AudioComponentDescription desc; desc.componentType =kAudioUnitType_Output; desc.componentSubType = k ...
- elasticsearch更改mapping,不停服务重建索引(转)
原文:http://donlianli.iteye.com/blog/1924721?utm_source=tuicool&utm_medium=referral Elasticsearch的 ...
- 【PHP】PHP初学者的学习线路
先来看下PHP初学者的学习线路: (1) 熟悉HTML/CSS/JS等网页基本元素,完成阶段可自行制作简单的网页,对元素属性相对熟悉. (2) 理解动态语言的概念和运做机制,熟悉基本的PHP语法. ( ...
- 【Loadrunner】【浙江移动项目手写代码】代码备份
vuser_init(){ lr_start_transaction("login"); web_url("10.78.224.136:8080" ...