Qt中使圖片像素變小
本文主要介紹了在Qt中使圖片像素變小。對于編程人員來說,編程那是小事,大概因為筆者不是圖形程序員的緣故,對這個小技巧十分之陌生,我想大家可能也有很大一部分人還不知道這個技巧,特此memo,希望對大家有用。
以下的代碼是將一個600*400的圖片弄成400*580顯示出來。
- QPixmap pixmap(":/set_background600x400.png");
- QPixmap fitpixmap=pixmap.scaled(400,560, Qt::KeepAspectRatio);
- label->setPixmap(fitpixmap);
我是參照網(wǎng)上的這句QPixmap fitPixmap = pixmap.scaled(width(),height(), Qt::KeepAspectRatio);
我的例子:
- #ifndef TEXT_H
- #define TEXT_H
- #include <QApplication>
- #include <QLabel>
- #include <QPainter>
- #include <QpaintEvent>
- //#include <>
- 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();
- }
還有網(wǎng)上的另外一個也有參考價值。 http://www.cuteqt.com/blog/?p=478
在Qt Labs Blog里提到了一個快速縮小大圖片的方法, 而且作者說是“幾乎所有圖形程序員都知道的trick”。 大概因為筆者不是圖形程序員的緣故, 對這個小技巧十分之陌生, 我想大家可能也有很大一部分人還不知道這個技巧, 特此memo, 希望對大家有用。
QImage提供了縮放圖片的函數(shù) scaled, 并且可以用參數(shù)指定”快速縮放(FastTransformation)”還是”平滑縮放(SmoothTransformation)”, 使用還是很方便的。 但是如果你用縮放函數(shù)去做大圖片的縮略圖可能會發(fā)現(xiàn)”快速縮放”得到的圖片質(zhì)量不佳, 而”平滑縮放”質(zhì)量很好但速度欠佳, 特別是原圖非常大的時候smoothscale簡直就是個噩夢阿。 這里就可以使用被稱為“Cheat Scaling”的縮小圖片的技巧了, 那就是先使用”快速縮放”得到一個中等大小的圖片以獲得較快的縮放速度, 再使用”平滑縮放”縮小至需要的大小以獲得較好的圖片質(zhì)量。
如下代碼:
- QImage result = img.scaled(800, 600).scaled(200, 150, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
一個公認比較好的方法是,先縮至縮略圖4倍大小, 再進一步平滑縮放。 按照原作者的測試, 該算法甚至比“快速縮放”還要略快, 卻能獲得和“平滑縮放”極其接近的最終結(jié)果。
小結(jié):在Qt中使圖片像素變小這篇內(nèi)容介紹完了,對于編程熟練的你,是否想熟練編程一樣熟悉它嘍,那么希望本文章能夠幫到你的忙。
【編輯推薦】