QPixmap類用於繪圖設備的圖像顯示,它即可以作為一個繪圖對象,也可以加載到一個控件中,通常是標簽或按鈕,用於在標簽或按鈕上顯示圖像。
QPixmap可以讀取的圖像文件類型有BMP、GIF、JPG、JPEG、PNG、PBM、PGM、PPM、XBM、XPM等
QPixmap與QImage的區別:
QPixmap依賴於硬件,QImage不依賴於硬件
QPixmap主要是用於繪圖,針對屏幕顯示而最佳化設計,QImage主要是為圖像I/O、圖片訪問和像素修改而設計的
當圖片小的情況下,直接用QPixmap進行加載,畫圖時無所謂,當圖片大的時候如果直接用QPixmap進行加載,會占很大的內存,一般一張幾十K的圖片,用QPixmap加載進來會放大很多倍,所以一般圖片大的情況下,用QImage進行加載,然后轉乘QPixmap用戶繪制。QPixmap繪制效果是最好的
#include <QPixmap>
載入圖像和顯示
QLabel* label=new QLabel(this); label->move(10,10); label->resize(500,500); QPixmap pm("./ma.jpg"); //創建QPixmap對象並讀取圖像 QPixmap p; //創建QPixmap對象 p.load("./laohu.jpg"); //載入圖像 //重復load同一圖像時,容易出錯,解決辦法看:https://blog.csdn.net/doupi2008/article/details/44960003/ label->setPixmap(p); //在label標簽中顯示圖像 label->adjustSize();
QPixmap(const QString &fileName, const char *format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor);//從指定的文件中加載圖像並生成QPixmap對象
參數2:format:字符串,表示圖像文件的格式,如果為0,將進行自動識別
參數3:flags:表示顏色的轉換模式
1) Qt::AutoColor:由系統自動決定。
2) Qt::ColorOnly:彩色模式。
3) Qt::MonoOnly:單色模式
常用操作
QLabel* label=new QLabel(this); label->move(10,10); label->resize(400,400); QLabel* label1=new QLabel(this); label1->move(450,10); label1->resize(400,400); QPixmap p("./ma.jpg"); QRect r=QRect(150,150,300,300); QPixmap p1=p.copy(r); //返回指定區域的圖像 QPixmap p2=p.copy(150,150,300,200); //返回指定區域的圖像 p1.save("./ss.jpg"); //保存圖像 //p2.fill(QColor(0,0,255)); //用給定的顏色填充pixmap //默認:Qt::white bool b=p2.hasAlpha(); //如果此pixmap有alpha通道或有掩碼,則返回true,否則返回false int n=p2.height(); //返回圖像的高 n=p2.width(); //返回圖像的寬 QSize s1=p2.size();//返回圖像的寬高 b=p2.isNull(); //如果這是空的pixmap,則返回true;否則返回false //空pixmap具有零寬度、零高度和無內容。不能在空pixmap中繪制 QSize s(200,100); QPixmap p3=p2.scaled(s);//將p2縮放成指定大小,然后返回新圖像 QPixmap p4=p1.scaled(s,Qt::KeepAspectRatio); //縮放圖像 /* 參數2:可選 IgnoreAspectRatio 默認 矩形框有多大,圖片就縮放成多大,不限制原圖片的長寬比 KeepAspectRatio 保持原圖片的長寬比,且不超過矩形框的大小 KeepAspectRatioByExpanding 根據矩形框的大小最大縮放圖片 參數3:可選 Qt::FastTransformation 默認 轉換快速執行,沒有任何平滑處理 Qt::SmoothTransformation 使用雙線性濾波對生成的圖像進行轉換 */ p4=p1.scaledToHeight(200); //按照高度縮放 /* 參數2:可選 Qt::FastTransformation 默認 轉換快速執行,沒有任何平滑處理 Qt::SmoothTransformation 使用雙線性濾波對生成的圖像進行轉換 */ p4=p1.scaledToWidth(200); //按照寬度縮放 /* 參數2:可選 Qt::FastTransformation 默認 轉換快速執行,沒有任何平滑處理 Qt::SmoothTransformation 使用雙線性濾波對生成的圖像進行轉換 */ QImage im=p1.toImage(); //將QPixmap對象轉換為QImage對象 //fromImage() 將QImage對象轉換為QPixmap對象 QTransform tf; //坐標變換 tf.rotate(30.5,Qt::YAxis); //參數1:旋轉角度 //參數2:旋轉軸 Qt::XAxis Qt::YAxis Qt::ZAxis默認 QPixmap p5=p4.transformed(tf,Qt::FastTransformation); //返回旋轉后的圖像 /* 參數1:旋轉角度 正數:順時針 負數:逆時針 參數2:Qt::FastTransformation 默認 變換執行迅速,無需平滑 Qt::SmoothTransfor 利用雙線性濾波對得到的圖像進行變換 */ qDebug()<<s1; label->setPixmap(p1); //在label標簽中顯示圖像 label->adjustSize(); label1->setPixmap(p5); label1->adjustSize();
作為繪圖設備
QLabel* label=new QLabel(this); label->move(10,10); label->resize(400,400); QPixmap p(300,300); //創建QPixmap空白圖像對象 //參數:圖像大小 QPainter painter(&p); //創建畫家 //參數:繪圖設備 painter.fillRect(100,100,100,50,Qt::blue);//在pix上繪制正方形 label->setPixmap(p); //在label標簽中顯示圖像 label->adjustSize();