2012-12-12 69 views
1

我正在使用包含圖像的不同單元尺寸的表格視圖。由於尺寸不同,我有時會使用ALAsset fullScreenImage以獲得比緩存縮略圖更高的分辨率。但是,由於它正在從磁盤加載相當大的圖像,因此顯着延遲(縮略圖幾乎立即加載)。如何在iOS中加載圖像的一部分,而無需將全部內容加載到內存中?

有沒有辦法從磁盤加載特定的分辨率圖像或圖像的一部分(如它的左半部分或右半部分)?我認爲整個東西都需要加載到內存中,因爲它通常是一個壓縮的jpeg,但我想我會問,以防萬一有些事我沒有考慮過。

回答

0

這對於某些圖像格式是可能的,但對於jpeg或png文件不是這樣。你也必須自己編寫它,因爲在iOS中沒有這個API,但是,如果你唯一的擔心是短暫的延遲,你可以將加載包裝到異步GCD隊列中,並使用縮略圖,而較高的res圖像是加載。

+0

是的,我做了異步隊列。我知道解壓一個JPEG通常需要整個事情,但似乎我已經看到了某種方式分解它的方法。 – akaru

+0

稍後在此頁面上查看我的答案。 – akw

+0

我想加載原始圖像,因爲它是縮放給定的寬度和高度。無需在內存中記錄原始圖像。 –

0

你可以從ALAssetsLibrary這樣讀取原始JPEG數據:

ALAssetRepresentation *rep = [self defaultRepresentation]; 
uint8_t *buffer = (uint8_t *) malloc(rep.size); 
NSUInteger buffered = [rep getBytes:buffer fromOffset:0.0 length:rep.size error:nil]; 

然後,你可以利用libjpeg和解碼只需要(8個像素四捨五入)的矩形。 請參閱jpegtran實用程序的來源以供參考。

對於在stackoverflow上的iOS編譯libjpeg有一些線程。

希望這會有所幫助。

相關問題