qt-QPixmap


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

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM