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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值