1. 程式人生 > >Android有效的展示圖片 (一) Loading Large Bitmaps Efficiently 有效的下載大圖片

Android有效的展示圖片 (一) Loading Large Bitmaps Efficiently 有效的下載大圖片

最近在看有關Android 圖片處理的相關內容,看到Android developer 上有這方面的練習指導,在此將自己看到的內容進行翻譯一下,省的每次用時都再去看英文了。

 1.圖片形狀大小各異,而且在很多情況下,他們的大小和我們應用介面的大小並不相符。例如:Gallery是個用來展示照片的應用,但是一般你相機的畫素要比你手機的畫素高。也就是說展示給你的圖片其實並不是原生的拍攝的圖片。藍色字型個人理解,只做參考

鑑於我們的手機的記憶體有限,很多情況下,我們希望下一個低畫素版本的圖片來節省記憶體。因為低畫素的圖片能更好的適應我們的UI以便展示出來,因為高畫素的圖片在我們的手機上並沒有更好的視覺效果,而且還佔用了我們的記憶體,在縮放方面也表現欠缺。

這節課將教我們通過解碼一個大的圖片使之不超出我們程式的記憶體,方法為縮小影象生成縮圖。

瞭解圖片的尺寸和型別

為了解碼不同型別的源資源來生成bitmap,BitmapFactory類提供了幾個不同的方法( (,, etc.))。根據你要壓縮的圖片的資料型別來選擇最合適的方法。這些方法總是回想著給生成的bitmap分配記憶體,所以很容易造成記憶體溢位異常(OutOfMemory exception)。每個解碼方法可以通過 來指定一些解碼的選項。為了避免分配記憶體,將 屬性設定為true,雖然返回的bitmap為空,但是可以得到原圖片的寬,高和圖片的源型別。這些方法可以讓你在構建bitmap之前獲得原圖片的尺寸和型別。

為了避免記憶體溢位異常的出現,你要在解碼之前瞭解你要安排的bitmap的尺寸大小。除非你有十足的把握知道你要解碼的圖片大小能完美的適合現有的程式記憶體。

下載一個縮略版的圖片到記憶體

既然圖片的原尺寸知道了,那麼我們就可以決定是原圖下載還是進行縮圖下載,下面是我們需要考慮的因素:
 1.估算原圖下載(無縮小版)的要佔用的記憶體
2.在程式提供的記憶體的基礎上你決定給該bitmap提供的記憶體大小
3.要承載該bitmap的imageview或者ui的控制元件的尺寸大小
4.當前手機裝置的螢幕大小和畫素密度
例如在一個大小為128x96畫素大小的imageview上展示圖片,沒必要下一個畫素為1024x768的圖片存至記憶體。
 物件的 為true,可以幫助分辨用來縮圖片的解碼方法。例如:解碼一個畫素為2048X1536的圖片,如果解析方法的 為4,那麼就會產生一個大約512X384畫素的bitmap,這個圖片佔的記憶體就是0.75M而非原圖片的12M,下面是一個根據縮略後的目的圖大小而計算縮小倍數的例子。
用下面的方法生成縮圖時,首先將inJustDecodeBounds設定為ture,將這個option傳遞過去並且用上述計算出來的縮略倍數進行縮略,然後再將
這個方法讓一個任意大小的圖片展示在一個100X100畫素的imageview變得簡單。如以下程式碼所示:
OK,文章翻譯完畢,下次就可以直接看咯!