QT 如何使圖片像素變小的問題

            這裏主要介紹了在Qt中使圖片像素變小,編程的時候,一般都是要添加圖片的,但是圖片有很大,對於編程人員來說,編程那是小事,要實現快速化縮小圖片,就是頭疼的事兒了,在你百思不得其解時,請往下看……

以下的代碼是將一個600*400的圖片弄成400*580顯示出來。

  1. QPixmap pixmap(":/set_background600x400.png");  
  2. QPixmap fitpixmap=pixmap.scaled(400,560, Qt::KeepAspectRatio);  
  3. label->setPixmap(fitpixmap); 

我是參照網上的這句QPixmap fitPixmap = pixmap.scaled(width(),height(), Qt::KeepAspectRatio);

我的例子:

#ifndef TEXT_H  

#define TEXT_H  

#include <QApplication> 

#include <QLabel> 

#include <QPainter> 

#include <QpaintEvent> 

class magic:public QWidget  

{  

public:  

           magic(QWidget *parent=0);  

private:  

          QLabel *label;  

       // void paintEvent(QPaintEvent *);  

};  

#endif                     // TEXT_H  

#include "text.h"  

magic::magic(QWidget *parent):QWidget(parent)  

{  

             setGeometry(20,20,800,600);  

             label=new QLabel(this);  

            label->setGeometry(QRect(10, 10, 400, 580));  

            QPixmap pixmap(":/set_background600x400.png");  

            QPixmap fitpixmap=pixmap.scaled(500, 500).scaled(400,560, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);  

            label->setPixmap(fitpixmap);  

}  

int main(int argc,char **argv)  

{  

            QApplication app(argc,argv);  

             magic M;  

            M.show();  

            return app.exec();  

還有網上的另外一個也有參考價值。 http://www.cuteqt.com/blog/?p=478

在Qt Labs Blog裏提到了一個快速縮小大圖片的方法, 而且作者說是“幾乎所有圖形程序員都知道的trick”。 大概因爲筆者不是圖形程序員的緣故, 對這個小技巧十分之陌生, 我想大家可能也有很大一部分人還不知道這個技巧, 特此memo, 希望對大家有用。

QImage提供了縮放圖片的函數 scaled, 並且可以用參數指定”快速縮放(FastTransformation)”還是”平滑縮放(SmoothTransformation)”, 使用還是很方便的。 但是如果你用縮放函數去做大圖片的縮略圖可能會發現”快速縮放”得到的圖片質量不佳, 而”平滑縮放”質量很好但速度欠佳, 特別是原圖非常大的時候smoothscale簡直就是個噩夢阿。 這裏就可以使用被稱爲“Cheat Scaling”的縮小圖片的技巧了, 那就是先使用”快速縮放”得到一箇中等大小的圖片以獲得較快的縮放速度, 再使用”平滑縮放”縮小至需要的大小以獲得較好的圖片質量。

如下代碼:

QImage result = img.scaled(800, 600).scaled(200, 150, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); 

一個公認比較好的方法是,先縮至縮略圖4倍大小, 再進一步平滑縮放。 按照原作者的測試, 該算法甚至比“快速縮放”還要略快, 卻能獲得和“平滑縮放”極其接近的最終結果。

另外Qt中按鈕背景圖片的切換如下設置:

ui->btn_name->setStyleSheet("QPushButton{background-image: url(:/images/call_up.bmp);}"
"QPushButton:hover{background-image: url(:/images/call_hov.bmp);}"
"QPushButton:pressed{background-image: url(:/images/call_down.bmp);}");

或者設置爲字符串的形式,在初始化時調用:

QString str="QPushButton#btn_name{background-image: url(:/images/call_up.bmp)}"
                    "QPushButton#btn_name:hover{background-image: url(:/images/call_hov.bmp);}"
                    "QPushButton#btn_name:pressed{background-image: url(:/images/call_down.bmp);}";

ui->btn_name->setFlat(true);//這句能夠實現按鈕透明

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章