Qt中的图像处理与绘制
文章目录
- 1 图像处理与绘制
- 1.1 QImage和QPixImage
- 1.2 简单图像处理
- 1.3 屏幕截图
1 图像处理与绘制
1.1 QImage和QPixImage
设备无关图像类-QImage:
- 独立于具体硬件的图像类。
- 主要用于读写图像文件,针对IO访问而设计。
- 能够直接在像素级对图像进行处理。
设备相关图像类-QPixmap:
- 依赖于具体硬件的图像类。
- 主要是用于绘图,针对屏幕显示而设计。
- 显示效果依赖于所在平台的绘图引擎(不可移植)。
要点:
- Qt图像类都继承自QPaintDevice。
- QPainter能够直接在图像上绘制图形。
- QImage和QPixmap能够相互转换。
特殊技能:
- QImage:
- 读取图像文件,直接进行像素级别操作。
- 内置简易图像处理相关算法。
- QPixmap:
- 最大限度利用硬件(显卡加速),增强图像显示效果。
- 屏幕截图、窗口截图、组件截图。
1.2 简单图像处理
重置图像大小并灰度化:
#include <QtCore/QCoreApplication>
#include <QImage>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QImage img;if( img.load("test.jpg") ){img = img.scaled(QSize(img.width() / 2, img.height() / 2));for(int i=0; i<img.width(); i++){for(int j=0; j<img.height(); j++){QRgb rgb = img.pixel(i, j);int r = qRed(rgb);int g = qGreen(rgb);int b = qBlue(rgb);int gray = (r + g + b) / 3;img.setPixel(i, j, qRgb(gray, gray, gray));}}img.save("new.jpg");}return a.exec();
}
1.3 屏幕截图
Widget.h:
#ifndef WIDGET_H
#define WIDGET_H#include <QtGui/QWidget>
#include <QPushButton>
#include <QPixmap>class Widget : public QWidget
{Q_OBJECTQPushButton m_loadBtn;QPushButton m_grabBtn;QPixmap m_pmap;private slots:void onLoadBtnClicked();void onGrabBtnClicked();
protected:void paintEvent(QPaintEvent *);
public:Widget(QWidget *parent = 0);~Widget();
};#endif // WIDGET_H
Widget.cpp:
#include "Widget.h"
#include <QPainter>
#include <QFileDialog>
#include <QImage>
#include <QMessageBox>
#include <QApplication>
#include <QDesktopWidget>Widget::Widget(QWidget *parent): QWidget(parent)
{m_loadBtn.setParent(this);m_loadBtn.move(10, 10);m_loadBtn.resize(70, 30);m_loadBtn.setText("Load");m_grabBtn.setParent(this);m_grabBtn.move(90, 10);m_grabBtn.resize(70, 30);m_grabBtn.setText("Grab");resize(500, 350);connect(&m_loadBtn, SIGNAL(clicked()), this, SLOT(onLoadBtnClicked()));connect(&m_grabBtn, SIGNAL(clicked()), this, SLOT(onGrabBtnClicked()));
}void Widget::onLoadBtnClicked()
{QFileDialog fd(this);fd.setAcceptMode(QFileDialog::AcceptOpen);fd.setFileMode(QFileDialog::ExistingFile);if( fd.exec() == QFileDialog::Accepted ){QImage img;if( img.load(fd.selectedFiles()[0]) ){m_pmap = QPixmap::fromImage(img);update();}else{QMessageBox(QMessageBox::Critical, "Error", "Invalid image file!").exec();}}
}void Widget::onGrabBtnClicked()
{m_pmap = QPixmap::grabWindow(QApplication::desktop()->winId());update();
}void Widget::paintEvent(QPaintEvent *)
{QPainter painter;if( !m_pmap.isNull() ){painter.begin(this);painter.drawPixmap(0, 0, width(), height(), m_pmap);painter.end();}
}Widget::~Widget()
{}
main.cpp:
#include <QtGui/QApplication>
#include "Widget.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}
参考资料:
- QT实验分析教程
Qt中的图像处理与绘制相关推荐
- Qt中的基础图形绘制
文章目录 1 Qt中的基础图形绘制 2 Qt基础图形绘制中的视口和窗口 3 综合实例开发:简易绘图程序 3.1 需求分析 3.2 设计分析 1 Qt中的基础图形绘制 Qt图形系统中的关键角色: QPa ...
- QT中使用OpenGL绘制图形
Qt Creator中的3D绘图及动画教程(参照NeHe) 刚刚学习了Qt Creator,发现Qt提供了QtOpenGL模块,对OpenGL做了不错的封装,这使得我们可以很轻松地在Qt程序中使用Op ...
- 使用QT实现一个图像处理软件1 —— 图片的加载和显示
为了实现图片的加载和显示,本文主要将使用到Qt中的几个类,分别是: QImage,这是Qt实现的一个存储图片信息的类,支持大部分的图片格式,支持像素操作,后续所有的图像处理算法都将在这个类的基础上进行 ...
- Qt 2D绘图(5):绘制图像基础
Qt 2D绘图(5):绘制图像基础 本文为原创文章,转载请注明出处,或注明转载自"黄邦勇帅(原名:黄勇) 本文出自本人原创著作<Qt5.10 GUI完全参考手册>网盘地址: ht ...
- Qt中如何设置label字体居中
Qt 可以做什么? Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部:Qt 除了可以绘制漂亮的界面(包括控件.布局.交互),还包含很多其它功能,比如多线程.访问 ...
- Qt中的QDialog
文章目录 1 Qt中的QDialog 1.1 QDialog简介 1.2 模态对话框和非模态对话框 1.3 对话框的返回值 2 登陆对话框实例分析 2.1 分析 2.2 代码实现 2.3 登录对话框的 ...
- Qt中的QWidget
文章目录 1 窗口组件 2 QWidget类 3 窗口类型 4 窗口部件的大小设置 5 QWidget常用方法 1 窗口组件 Qt中的窗口组件: 图形用户界面由不同的窗口和窗口组件构成. <Qt ...
- Qt 中容器类型的控件
转载:https://subingwen.cn/qt/qt-containers/ 1.QWidget 这个类是所有窗口类的父类,可以作为独立窗口使用,也可以内嵌到其它窗口中使用. Qt 中的所有控件 ...
- 【Qt】2D绘图之绘制图像(二)
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 绘制QImage图像 04. 绘制QPixmap图像 05. 绘制QPicture图像 06. 综合对比 07. 附录 0 ...
最新文章
- python compile正则_Python 正则表达式:compile,match
- 专题 15 TCP套接字编程
- 计算机考试字字处理重点,计算机等级考试一级B上机试题:字表处理题(1)
- es6箭头函数_ES6语法之-箭头函数
- Mysql Connector 5.1 好用的新特性
- Boost:不受约束的集合bimap的测试程序
- Hologres如何支持亿级用户UV计算
- 电商C4D设计素材背景,3D效果是最适合电商产品
- 苹果新功能惹众怒,4000多家组织和个人签署公开信 敦促苹果放弃“儿童安全”功能...
- 两岁的微信小程序,创造超 5000 亿的价值
- 启动mysql55命令_mysql服务的启动和停止登陆mysql增加新用命令和方法实例教程
- linux 命令行参数解析,Linux C下的命令行参数解析
- Java开发环境系列:你真的会用eclipse吗?
- 英特尔hd630驱动_Ubuntu 16.04安装Intel显卡驱动(解决Intel HD Graphics 630显卡驱动问题)...
- android 7.1 开机速度优化记录
- The Apostle's Creed
- Python3的下载和安装步骤
- Linux编程入门四进程
- 迅为iTOP-i.MX6ULL 开发板-Mqtt 移植教程
- 数据库报表:统计当前指标值比上月,比上季度,比年初,比去年同期增幅(同比)指标值,sql逻辑