前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++对于大型图片的加载缩放尝试

C++对于大型图片的加载缩放尝试

作者头像
Gxjun
发布2018-03-27 11:35:45
1.7K0
发布2018-03-27 11:35:45
举报
文章被收录于专栏:ml

Qt对于图片的操作主要集中在这几个类 QImage ,QImageReader ,QPixmap

其中QImage这个类对图片的缩放有几个很不错的技巧,不过对于大图片却并不好使,当我们去看QImage的实现代码时,会发现其中读取QImageReader来加载图片,当我们去看QImageReader的实现的时候,我们会发现QImageReader的加载模式是unbuffer-->无缓冲加载模式,而且加载速度也是相当的快,所以QImageReader对大图片进行缩放很好使.

但是QImage也是有一些独特的优势,在内存数据或者不是超大数据图片时,进行平缓缩放(特别是两步缩放的时候,时间效率和图片质量都还是相当不错的)

下面逐一说明,对于QImage如何进行平滑缩放

代码语言:javascript
复制
 1 /*设定图片大小*/
 2  unsigned int  image_width ,image_height;
 3 
 4  image_width=1000;  
 5  image_height=1000;
 6 
 7 QImage  m_image("D:\\123.jpg");
 8 /*
 9      *首先缩放到我们设定大小的四倍,在缩放到我们需要缩放的
10      *大小(时间效果很快,图片质量比较好)
11      *需要结合快速减半法一起使用.
12 */ 
13 QImage m_res = m_image.scaled(image_width<<2,
14         image_height<<2).scaled(image_width,     image_height,Qt::IgnoreAspectRatio,Qt::SmoothTransformation
15 );
16 
17   QLabel *m_label= new QLabel;
18 m_label->setPixmap(QPixmap::fromImage(m_image));
19     m_label->show();

对于QImageReader则可以这样设定图片(可以任意比例)

代码语言:javascript
复制
       QImage img;
    QImageReader reader;                // 设置图片名
    reader.setFileName("D:\\123.jpg");   // 读取图片大小
    //sleep(30000);
    QSize imageSize = reader.size();          // 缩放图片尺寸以适应屏幕大小
    //imageSize.scale(100,100,);   //设定宽度高度比例
    //imageSize.scale(100,Qt::KeepAspectRatio); // 设置图片大小
    imageSize.setHeight(500);
    imageSize.setWidth(500);
    reader.setScaledSize(imageSize);
    img= reader.read(); // 读取图片
  QLabel *m_label= new QLabel;
    //m_label->resize(image_width,image_height);
    img.save("D://4567.jpg");
    m_label->setPixmap(QPixmap::fromImage(img));
    m_label->show();

 不过很可惜,对于超大图片而言,Qt只能对于支持的图片进行操作(比如jpeg由于是8*8block的模式,支持一行一行读取,所以可以节省较大的内存空间),而对于其他不支持的格式,当面临较大的尺寸时,会出现因为内存太大,而无法加载的情况...

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-12-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档