加载图片:
压缩图片:
(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