加載圖片:
壓縮圖片:
(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