文章目录

  • 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();
}

参考资料:

  1. QT实验分析教程

Qt中的图像处理与绘制相关推荐

  1. Qt中的基础图形绘制

    文章目录 1 Qt中的基础图形绘制 2 Qt基础图形绘制中的视口和窗口 3 综合实例开发:简易绘图程序 3.1 需求分析 3.2 设计分析 1 Qt中的基础图形绘制 Qt图形系统中的关键角色: QPa ...

  2. QT中使用OpenGL绘制图形

    Qt Creator中的3D绘图及动画教程(参照NeHe) 刚刚学习了Qt Creator,发现Qt提供了QtOpenGL模块,对OpenGL做了不错的封装,这使得我们可以很轻松地在Qt程序中使用Op ...

  3. 使用QT实现一个图像处理软件1 —— 图片的加载和显示

    为了实现图片的加载和显示,本文主要将使用到Qt中的几个类,分别是: QImage,这是Qt实现的一个存储图片信息的类,支持大部分的图片格式,支持像素操作,后续所有的图像处理算法都将在这个类的基础上进行 ...

  4. Qt 2D绘图(5):绘制图像基础

    Qt 2D绘图(5):绘制图像基础 本文为原创文章,转载请注明出处,或注明转载自"黄邦勇帅(原名:黄勇) 本文出自本人原创著作<Qt5.10 GUI完全参考手册>网盘地址: ht ...

  5. Qt中如何设置label字体居中

    Qt 可以做什么? Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部:Qt 除了可以绘制漂亮的界面(包括控件.布局.交互),还包含很多其它功能,比如多线程.访问 ...

  6. Qt中的QDialog

    文章目录 1 Qt中的QDialog 1.1 QDialog简介 1.2 模态对话框和非模态对话框 1.3 对话框的返回值 2 登陆对话框实例分析 2.1 分析 2.2 代码实现 2.3 登录对话框的 ...

  7. Qt中的QWidget

    文章目录 1 窗口组件 2 QWidget类 3 窗口类型 4 窗口部件的大小设置 5 QWidget常用方法 1 窗口组件 Qt中的窗口组件: 图形用户界面由不同的窗口和窗口组件构成. <Qt ...

  8. Qt 中容器类型的控件

    转载:https://subingwen.cn/qt/qt-containers/ 1.QWidget 这个类是所有窗口类的父类,可以作为独立窗口使用,也可以内嵌到其它窗口中使用. Qt 中的所有控件 ...

  9. 【Qt】2D绘图之绘制图像(二)

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 绘制QImage图像 04. 绘制QPixmap图像 05. 绘制QPicture图像 06. 综合对比 07. 附录 0 ...

最新文章

  1. python compile正则_Python 正则表达式:compile,match
  2. 专题 15 TCP套接字编程
  3. 计算机考试字字处理重点,计算机等级考试一级B上机试题:字表处理题(1)
  4. es6箭头函数_ES6语法之-箭头函数
  5. Mysql Connector 5.1 好用的新特性
  6. Boost:不受约束的集合bimap的测试程序
  7. Hologres如何支持亿级用户UV计算
  8. 电商C4D设计素材背景,3D效果是最适合电商产品
  9. 苹果新功能惹众怒,4000多家组织和个人签署公开信 敦促苹果放弃“儿童安全”功能...
  10. 两岁的微信小程序,创造超 5000 亿的价值
  11. 启动mysql55命令_mysql服务的启动和停止登陆mysql增加新用命令和方法实例教程
  12. linux 命令行参数解析,Linux C下的命令行参数解析
  13. Java开发环境系列:你真的会用eclipse吗?
  14. 英特尔hd630驱动_Ubuntu 16.04安装Intel显卡驱动(解决Intel HD Graphics 630显卡驱动问题)...
  15. android 7.1 开机速度优化记录
  16. The Apostle's Creed
  17. Python3的下载和安装步骤
  18. Linux编程入门四进程
  19. 迅为iTOP-i.MX6ULL 开发板-Mqtt 移植教程
  20. 数据库报表:统计当前指标值比上月,比上季度,比年初,比去年同期增幅(同比)指标值,sql逻辑

热门文章

  1. python split 倒数第一个_请教一个在python中该如何去掉split之后的第一个单词?
  2. 【Matlab 控制】函数调用函数
  3. STM32 基础系列教程 45 - FSMC_LCD_Touch
  4. Android中对Log日志文件的分析
  5. 【问题】最近遇到的不大不小的arduino库使用问题
  6. 创客编程帮助孩子提升学习成绩,是一项长远投资!
  7. 自测题的整理(持续更新)
  8. Centos下修改启动项和网络配置
  9. 高速掌握Lua 5.3 —— 字符串库 (2)
  10. IDEA9+Tomcat热部署配置二法