QT 如何使图片像素变小的问题(转载自http://blog.csdn.net/sylwlw/article/details/7732038)

来源:互联网 发布:淘宝店铺客服如何联系 编辑:程序博客网 时间:2024/05/02 01:08

      这里主要介绍了在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);//这句能够实现按钮透明

阅读全文
0 0
原创粉丝点击