日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

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

發(fā)布時(shí)間:2023/11/29 c/c++ 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++对于大型图片的加载缩放尝试 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Qt對(duì)于圖片的操作主要集中在這幾個(gè)類 QImage ,QImageReader ,QPixmap

其中QImage這個(gè)類對(duì)圖片的縮放有幾個(gè)很不錯(cuò)的技巧,不過對(duì)于大圖片卻并不好使,當(dāng)我們?nèi)タ碤Image的實(shí)現(xiàn)代碼時(shí),會(huì)發(fā)現(xiàn)其中讀取QImageReader來加載圖片,當(dāng)我們?nèi)タ碤ImageReader的實(shí)現(xiàn)的時(shí)候,我們會(huì)發(fā)現(xiàn)QImageReader的加載模式是unbuffer-->無緩沖加載模式,而且加載速度也是相當(dāng)?shù)目?#xff0c;所以QImageReader對(duì)大圖片進(jìn)行縮放很好使.

但是QImage也是有一些獨(dú)特的優(yōu)勢(shì),在內(nèi)存數(shù)據(jù)或者不是超大數(shù)據(jù)圖片時(shí),進(jìn)行平緩縮放(特別是兩步縮放的時(shí)候,時(shí)間效率和圖片質(zhì)量都還是相當(dāng)不錯(cuò)的)

下面逐一說明,對(duì)于QImage如何進(jìn)行平滑縮放

1 /*設(shè)定圖片大小*/ 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 *首先縮放到我們?cè)O(shè)定大小的四倍,在縮放到我們需要縮放的 10 *大小(時(shí)間效果很快,圖片質(zhì)量比較好) 11 *需要結(jié)合快速減半法一起使用. 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();

對(duì)于QImageReader則可以這樣設(shè)定圖片(可以任意比例)

QImage img;QImageReader reader; // 設(shè)置圖片名reader.setFileName("D:\\123.jpg"); // 讀取圖片大小//sleep(30000);QSize imageSize = reader.size(); // 縮放圖片尺寸以適應(yīng)屏幕大小//imageSize.scale(100,100,); //設(shè)定寬度高度比例//imageSize.scale(100,Qt::KeepAspectRatio); // 設(shè)置圖片大小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();

?不過很可惜,對(duì)于超大圖片而言,Qt只能對(duì)于支持的圖片進(jìn)行操作(比如jpeg由于是8*8block的模式,支持一行一行讀取,所以可以節(jié)省較大的內(nèi)存空間),而對(duì)于其他不支持的格式,當(dāng)面臨較大的尺寸時(shí),會(huì)出現(xiàn)因?yàn)閮?nèi)存太大,而無法加載的情況...

總結(jié)

以上是生活随笔為你收集整理的C++对于大型图片的加载缩放尝试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。