BitMap加載、壓縮、緩存

加載圖片:


壓縮圖片:

(1)加載大尺寸圖片時,採樣壓縮

很多時候ImageView尺寸小於圖片原始尺寸,沒必要把原始圖片全部加載到內存,可能造成oom,並且ImageView也沒辦法全部顯示原始圖片,採樣壓縮將縮小後的圖片在ImageView中顯示,同時降低圖片內存佔用從而避免oom,提高Bitmap加載性能。

上述四種Bitmap加載方法都支持BitmapFactory.Options參數,設置BitmapFactory.Options的採樣率(inSampleSize)對圖片進行壓縮,

inSampleSize<=1不壓縮,inSampleSize=4,加載後的圖片長和寬是原圖片長和寬的1/4,像素數是原圖片的1/16,加載後佔用的內存也是原圖片佔用內存的1/16.

壓縮的步驟:1將BitmapFactory.Options的inJustDecodeBounds置爲true ;2 BitmapFactory加載圖片,

從BitmapFactory.Options中獲取原圖片的寬和高(outWidth、outHeight);3結合目標view(imageView)所需圖片大小,計算採樣率;

4將BitmapFactory.Options的inJustDecodeBounds置爲false,重新加載。



其他三種加載方法壓縮流程類似

(2)按比例縮放圖片

1計算Bitmap的寬和高;

2根據想要壓縮的尺寸計算壓縮比例;

3利用Matrix matrix = new Matrix()設置寬、高壓縮比,生成壓縮後的Bitmap


(3)通過Bitmap.compress()方法壓縮


方法(3)不會減少圖片的像素,壓縮的圖片文件大小會有改變,但是導入成bitmap後佔得內存是不變的。

因爲要保持像素不變,所以它就無法無限壓縮,到達一個值之後就不會繼續變小了。

Bitmap壓縮參考鏈接:

http://www.tuicool.com/articles/vEf6Nf

圖片緩存:

通過LruCache實現內存緩存,DiskLruCache實現磁盤緩存

Lrucache內部是通過final修飾的LinkedHashMap保存對象的。


DiskLruCache不是Android SDK中的類文件,是一個開源的類文件,其也採用最近最少使用算法把緩存對象存儲在磁盤上。

圖片緩存參考鏈接:

http://blog.csdn.net/yuzhiboyi/article/details/7638952

http://blog.csdn.net/jdsjlzx/article/details/44228935

http://blog.csdn.net/jdsjlzx/article/details/44228935





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章