Qt中的图像处理与绘制
生活随笔
收集整理的這篇文章主要介紹了
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 簡單圖像處理
重置圖像大小并灰度化:
1.3 屏幕截圖
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中的图像处理与绘制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 哪些措施维护我国的军事安全
- 下一篇: 关于抗日战争的故事?