Qt的四个常见的图像叠加模式
来源:互联网 发布:远程网络教育的优势 编辑:程序博客网 时间:2024/06/17 14:00
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的四个常见的图像叠加模式
- QT+opencv ROI区域图像叠加&初级图像混合 label里输出Mat图片要做的变换
- 两幅图像的线性叠加
- 利用OpenCV实现图像的叠加
- [转]利用OpenCV实现图像的叠加
- 垃圾邮件的四个常见陷阱
- 模式 的四个基本要素
- 一个模式的四个基本要素
- 设计模式的四个基本要素
- 在DirectShow的视频图像上叠加线条和文字
- Matlab图像的代数运算(去除叠加噪声)
- 图像处理--GIF和静态图的叠加
- 在DirectShow的视频图像上叠加线条和文字
- 图像叠加及透明度的调整在matlab下实现
- 基于FPGA的Alpha半透明图像叠加算法实现
- 【面试】四个比较常见的RuntimeException
- 在arcgis常见的叠加分析情况汇总 (转)
- OpenGL+QT实现矢量和影像的叠加绘制
- c++ String 类的简单实现和写时拷贝
- 浙大PAT甲级 1035
- 拼搏不息的精神
- Codeforces Round #364 (Div. 2) C. They Are Everywhere (尺取法)
- Batch Normalization 学习
- Qt的四个常见的图像叠加模式
- 计算机网络-可靠数据传输机制及其用途总结
- UVA 12898 AND OR
- HDU-2830最大矩形问题(三)
- 【图像处理】基本形态学操作
- JAVA8新特性 函数式编程Lambda
- 视频教程
- 使用 iframe 引用优酷和土豆和腾讯视频,支持 HTML5 手机 播放
- e = e || window.event用法细节讨论