C++对于大型图片的加载缩放尝试
生活随笔
收集整理的這篇文章主要介紹了
C++对于大型图片的加载缩放尝试
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Qt對于圖片的操作主要集中在這幾個類 QImage ,QImageReader ,QPixmap
其中QImage這個類對圖片的縮放有幾個很不錯的技巧,不過對于大圖片卻并不好使,當我們去看QImage的實現(xiàn)代碼時,會發(fā)現(xiàn)其中讀取QImageReader來加載圖片,當我們去看QImageReader的實現(xiàn)的時候,我們會發(fā)現(xiàn)QImageReader的加載模式是unbuffer-->無緩沖加載模式,而且加載速度也是相當?shù)目?#xff0c;所以QImageReader對大圖片進行縮放很好使.
但是QImage也是有一些獨特的優(yōu)勢,在內存數(shù)據(jù)或者不是超大數(shù)據(jù)圖片時,進行平緩縮放(特別是兩步縮放的時候,時間效率和圖片質量都還是相當不錯的)
下面逐一說明,對于QImage如何進行平滑縮放
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則可以這樣設定圖片(可以任意比例)
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的模式,支持一行一行讀取,所以可以節(jié)省較大的內存空間),而對于其他不支持的格式,當面臨較大的尺寸時,會出現(xiàn)因為內存太大,而無法加載的情況...
總結
以上是生活随笔為你收集整理的C++对于大型图片的加载缩放尝试的全部內容,希望文章能夠幫你解決所遇到的問題。

- 上一篇: 梦到给死人买鞋好不好
- 下一篇: 做梦梦到很多青蛙是什么意思