這裏主要介紹了在Qt中使圖片像素變小,編程的時候,一般都是要添加圖片的,但是圖片有很大,對於編程人員來說,編程那是小事,要實現快速化縮小圖片,就是頭疼的事兒了,在你百思不得其解時,請往下看……
以下的代碼是將一個600*400的圖片弄成400*580顯示出來。
- QPixmap pixmap(":/set_background600x400.png");
- QPixmap fitpixmap=pixmap.scaled(400,560, Qt::KeepAspectRatio);
- 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
);
//這句能夠實現按鈕透明