Qt顯示影象的類
Qt 中沒有專門顯示圖片的控制元件,通常我們會使用QLabel來顯示圖片。但是QLabel 顯示圖片的能力還是有點弱。比如不支援影象的縮放一類的功能,使用起來不是很方便。因此我就自己寫了個簡單的類。
我這個類支援三種影象顯示模式,我分別稱之為:FIXED_SIZE, CENTRED,AUTO_ZOOM, AUTO_SIZE。
- FIXED_SIZE 模式下,顯示的影象大小等於影象尺寸乘以縮放因子,如果控制元件的尺寸小於這個大小則多出的部分被裁切掉。
- FIX_SIZE_CENTRED模式與FIXED_SIZE 模式類似,但是,顯示的影象居於視窗正中。
- AUTO_ZOOM 模式下,顯示的影象大小自動適應控制元件視窗大小。
- AUTO_SIZE 模式下,這個控制元件的尺寸等於影象尺寸乘以縮放因子。
下面是程式碼:
- #ifndef PICTUREBOX_H
- #define PICTUREBOX_H
- #include <QWidget>
- #include <QImage>
- #include <QPixmap>
- class PictureBox : public QWidget
- {
- Q_OBJECT
- public:
- enum PB_MODE {FIXED_SIZE, FIX_SIZE_CENTRED, AUTO_ZOOM, AUTO_SIZE};
- explicit
- void setMode(PB_MODE mode);
- ~PictureBox();
- private:
- QPixmap m_pixmap;
- double m_scale;
- PB_MODE m_mode;
- QBrush m_brush;
- protected:
- void paintEvent(QPaintEvent * event);
- signals:
- public slots:
- bool setImage(QImage &image,
- void setBackground(QBrush brush);
- };
- #endif // PICTUREBOX_H
- #include "picturebox.h"
- #include <QPainter>
- #include <QDebug>
- staticconstint IMAGE_WIDTH = 160;
- staticconstint IMAGE_HEIGHT = 120;
- staticconst QSize IMAGE_SIZE = QSize(IMAGE_WIDTH, IMAGE_HEIGHT);
- PictureBox::PictureBox(QWidget *parent) : QWidget(parent)
- {
- m_pixmap = QPixmap(IMAGE_SIZE);
- m_pixmap.fill();
- m_scale = 1.0;
- m_mode = FIXED_SIZE;
- m_brush = QBrush(Qt::white);
- }
- void PictureBox::setBackground(QBrush brush)
- {
- m_brush = brush;
- update();
- }
- void PictureBox::setMode(PB_MODE mode)
- {
- m_mode = mode;
- if(m_mode == AUTO_SIZE)
- {
- setFixedSize(m_pixmap.size() * m_scale);
- }
- else
- {
- setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
- setMinimumSize(0, 0);
- }
- update();
- }
- bool PictureBox::setImage(QImage &image, double scale)
- {
- if(image.isNull())
- {
- returnfalse;
- }
- m_pixmap = QPixmap::fromImage(image);
- m_scale = qBound(0.01, scale, 100.0);
- if(m_mode == AUTO_SIZE)
- {
- setFixedSize(m_pixmap.size() * m_scale);
- }
- update();
- returntrue;
- }
- void PictureBox::paintEvent(QPaintEvent * event)
- {
- Q_UNUSED(event);
- QPainter painter(this);
- painter.setBackground(m_brush);
- painter.eraseRect(rect());
- double window_width, window_height;
- double image_width, image_height;
- double r1, r2, r;
- int offset_x, offset_y;
- switch (m_mode)
- {
- case FIXED_SIZE:
- case AUTO_SIZE:
- painter.scale(m_scale, m_scale);
- painter.drawPixmap(0, 0, m_pixmap);
- break;
- case FIX_SIZE_CENTRED:
- window_width = width();
- window_height = height();
- image_width = m_pixmap.width();
- image_height = m_pixmap.height();
- offset_x = (window_width - m_scale * image_width) / 2;
- offset_y = (window_height - m_scale * image_height) / 2;
- painter.translate(offset_x, offset_y);
- painter.scale(m_scale, m_scale);
- painter.drawPixmap(0, 0, m_pixmap);
- break;
- case AUTO_ZOOM:
- window_width = width();
- window_height = height();
- image_width = m_pixmap.width();
- image_height = m_pixmap.height();
- r1 = window_width / image_width;
- r2 = window_height / image_height;
- r = qMin(r1, r2);
- offset_x = (window_width - r * image_width) / 2;
- offset_y = (window_height - r * image_height) / 2;
- painter.translate(offset_x, offset_y);
- painter.scale(r, r);
- painter.drawPixmap(0, 0, m_pixmap);
- break;
- }
- }
- PictureBox::~PictureBox()
- {
- }
原文連結:
相關推薦
Qt顯示影象的類
Qt 中沒有專門顯示圖片的控制元件,通常我們會使用QLabel來顯示圖片。但是QLabel 顯示圖片的能力還是有點弱。比如不支援影象的縮放一類的功能,使用起來不是很方便。因此我就自己寫了個簡單的類。我這個類支援三種影象顯示模式,我分別稱之為:FIXED_SIZE, CENTR
QT讀取影象 顯示
1.在ui介面放置一個button,物件名稱為pushButton;放置一個label,名稱為imagelabel 2.標頭檔案 mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainW
QT中圖表類QChart系列之(7)-小結,chart中顯示曲線的標準步驟
在chart中建立曲線的標準步驟: 必須嚴格按以下步驟操作,否則會出現這樣那樣的顯示問題。寫法1: (1)建立chartView、chart、N個series、2個axis物件 (2)chart->setAxisX/Y() (3)chart->addSeries
【Qt開發】QT中顯示影象資料
一般影象資料都是以RGBRGBRGB……位元組流的方式(解碼完成後的原始影象流),我說成位元組流,那就表明R,G,B的值各佔一個位元組,在程式設計時表示的就是unsigned char * data。 我們先來看一下QT中的QImage物件。在載入data資料
QT中顯示影象資料
一般影象資料都是以RGBRGBRGB……位元組流的方式(解碼完成後的原始影象流),我說成位元組流,那就表明R,G,B的值各佔一個位元組,在程式設計時表示的就是unsigned char * data。 我們先來看一下QT中的QImage物件。在載入data
[python] Kmeans文字聚類演算法+PAC降維+Matplotlib顯示聚類影象
0 前言 本文主要講述以下幾點: 1.通過scikit-learn計算文字內容的tfidf並構造N*M矩陣(N個文件 M個特徵詞); 2.呼叫scikit-learn中的K-means進行文字聚類; 3.使用PAC進行降維處理,每
【Qt開發】Qt中顯示影象的兩種方法對比
在Qt中處理圖片一般都要用到QImage類,但是QImage的物件不能夠直接顯示出來,要想能看到圖片,初步發現有兩種方法。 一、QImage轉QPixmap,然後用QLabel::setPixmap() image=new QImage("D:/Temp/XX.jpg
QT Label顯示影象
直接上程式碼: Mat srcImg; //////////////////////////// void MainWindow::paintEvent(QPaintEvent *e) { QImage image = QImage((uchar*)(srcImg
python實現Kmeans文字聚類,通過PCA降維和Matplotlib顯示聚類3d三維影象
首先感謝Eastmount寫的內容http://blog.csdn.net/Eastmount/article/details/50545937。點選開啟連結 在此基礎上,主要實現以下改進及結果 1.替換使用sklearn.feature_extraction.text.T
Qt中影象的顯示與基本操作
Qt可顯示基本的影象型別,利用QImage、QPxmap類可以實現影象的顯示,並且利用類中的方法可以實現影象的基本操作(縮放、旋轉)。 1. Qt可顯示的影象型別 參考Qt的幫助文件,可支援的型別,即可以直接讀取並顯示的格式有BMP、GIF、JPG、JPEG、PNG、
qt顯示灰度影象程式
I = imread("lena.jpg",0); qDebug( "my window %d%d", I.rows,I.cols); if(flag==1)
Qt 串口類QSerialPort 使用筆記
keyword deb ria clip -m tools ror dal csdn Qt 串口類QSerialPort 使用筆記 雖然現在大多數的家用PC機上已經不提供RS232接口了。但是由於RS232串口操作簡單、通訊可靠,在工業領域中仍然有大量的應用。Qt以前的
QSet使用及Qt自定義類型使用QHash等算法
算法 har 地址 node slc doc support ati tarray 版權聲明:若無來源註明,Techie亮博客文章均為原創。 轉載請以鏈接形式標明本文標題和地址: 本文標題:QSet使用及Qt自定義類型使用QHash等算法 本文地址:http://
【QT】常用類
自動選擇 article 出現 pix 並且 win app 在屏幕上 部件 官方文檔 doc QWidget QWidget類是所有用戶界面對象的基類。 窗口部件是用戶界面的一個基本單元:它從窗口系統接收鼠標、鍵盤和其它事件,並且在屏幕上繪制自己。 每一個窗口部件
《Qt數據類型》--QByteArray,QString,int,hex之間的轉化
details strong AS CI bytearray 轉化 ascii 根據 SQ 對於QString和QByteArray,他們都有一個toInt的靜態函數,QString::toInt()是根據string的字面值轉化為int類型,比如string:"12
QT顯示中文 連接上文
bus 完成後 改變 chan 快速 little 開啟 庫文件 malloc 1.首先是建立Linux開發環境1.1.在windowsXP下安裝博創公司提供的虛擬機軟件VMware Workstation,版本為VMware-workstation-full-7.0.1-
Ubuntu下orbbec mini 無法正常顯示影象問題
最近用orbbec的深度攝像頭採集RGBD影象,Windows下一切OK。但是Ubuntu下出現了不少問題。總結一下 1、將裝置插到USB,先確定電腦能否正常識別裝置 Ubuntu下是不需要安裝驅動的(Windows下需要),因為Linux都有內建相應CMOS相機驅動。只需要設定一下udev進行相應的裝載
QT利用QSqlQuery類執行SQL語句
參考網址:http://www.qter.org/forum.php?mod=viewthread&tid=6448 導語 SQL即結構化查詢語言,是關係資料庫的標準語言。前面兩節中已經在Qt裡利用QSq
QT---之QStringList類常用方法
從QList <QString>繼承而來,它提供快速索引為基礎的接入以及快速插入和清除 其成員函式用於操作這個字串列表如 append(),insert(), replace(), removeAll(), removeAt(), removeFirst(), removeLast(),
Qt下影象生成、輸入與輸出
#include "widget.h" #include <QApplication> #include <stdio.h> #include <opencv2/opencv.hpp> #include <QDebug> using namespa