2014-04-01 48 views
4

標題總結了這一個。如果我正在加載〜200張各種大小的圖像。我怎樣才能加載標題,所以我可以知道每個圖像的大小?Qt讀取許多圖像優化 - 如何只讀取大小?

目前我發現它需要大量的CPU /內存和IO加載它們到內存只是爲了大小(我試圖從他們生成一個圖集)。

QImage似乎沒有辦法做到這一點。 QImageReader聽起來像是我想要的,但這似乎仍然在繼續閱讀整個圖像,所以不太確定它的目的是什麼。是否有另一個類或某種方式來使用我剛纔提到的類只從頭中獲取圖像大小?

+0

QImageReader是否讀取整個文件,即使您[調用'format' * *不調用'read'](http://stackoverflow.com/a/10564936/3126098)? –

+0

格式()不會給我的圖像大小,只有圖像格式 – paulm

+0

你試圖找到實際的文件大小以字節爲單位,或圖像的尺寸? –

回答

3

如何只加載標題,以便我可以知道每個圖像的大小?

顯然它看起來像你認爲圖像文件頭(前幾個字節)包含圖像的大小。這不適用(至少不適用於所有圖像格式類型)。我檢查了幾種格式(PNG)。

目前我覺得它需要大量的CPU /內存和IO的在所有 它們加載到內存只是爲大小

正如你所提到的,你要加載左右〜200圖像在一次只是爲了找到大小。這種設計看起來不太好,我們應該嘗試將我們的問題分解成更小的問題。所以這裏有效的方法可能是打開一個文件並將大小存儲找到一些數據結構並關閉文件。如果您的程序的其他部分需要將〜200圖像加載到內存中,那麼我們應該嘗試考慮如何避免它。

QImage似乎沒有辦法做到這一點?

它並沒有像所有類型的圖像格式似乎沒有便攜/一致的方式。但是,如果您知道任何包含頭文件的文件格式,您可以編寫一個小幫助程序函數,它可以打開文件並讀取頭文件並查找大小。但是這個輔助函數對於特定類型的圖像格式會非常具體,我們可能需要編寫不同的邏輯來讀取標題(所有圖像格式具有不同的標題大小和信息)。

+1

採取了點,但肯定讀一個PNG頭,即使這意味着尋找文件一點點比讀取整個東西快,應用解壓縮/其他任何和轉換每個像素? – paulm

+0

@paulm:是的,它會更快,因爲頭大小約8-16字節,而圖像的總大小可能在幾KB的範圍內。但大多數圖像處理算法可能需要加載完整的文件到內存以應用任何文件管理器/算法。 –