本文主要介绍了在Qt中使图片像素变小。对于编程人员来说,编程那是小事,大概因为笔者不是图形程序员的缘故,对这个小技巧十分之陌生,我想大家可能也有很大一部分人还不知道这个技巧,特此memo,希望对大家有用。
以下的代码是将一个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>
- //#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();
- }
还有网上的另外一个也有参考价值。 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中使图片像素变小这篇内容介绍完了,对于编程熟练的你,是否想熟练编程一样熟悉它喽,那么希望本文章能够帮到你的忙。
【编辑推荐】