Bitmap在Android中指的是一张图片,可以是png格式也可以是jpg等其他常见的图片格式。BitmapFactory提供了四类方法:decodeFile、decodeResourece、decodeStream和decodeByteArray,分别用于支持从文件系统、资源、输入流以及字节数组中加载出一个Bitmap对象,其中decodeFile和decodeResourece又间接调用了decodeStream方法。要实现高效的加载Bitmap,那就是采用BitmapFactory.Options来加载所需尺寸的图片。我在通过ImageView显示图片时,ImageView并没有原始图片尺寸那么大,如果把整个图片加载进来设置给ImageView,那么ImageView并没有方法显示原始的图片,有可能会出现OOM。通过BitmapFactory.Options就可以按一定的采样率来加载缩小后的图片,将缩小后的图片在ImageVew中显示,这样就会降低内存占有从而一定程度上避免OOM,提供了Bitmap加载的性能。
在上一段描述中提到了inSampleSize即采样率,当这个参数为1时,采样后的图片大小和原来一样;当这个参数为2时,采样后的图片宽高均为原来的1/2,大小也就成了原来的1/4。也就是说,采样后的大小等于原始大小除以采样率的平方。官方文档规定,inSampleSize的值应为2的非负整数次幂(1,2,4,... ),否则会被系统向下取整并找到一个最接近的值。以下是根据计算采样率得出ImageView所期望加载图片大小案例。
参考资料:《Android开发艺术探索》
在上一段描述中提到了inSampleSize即采样率,当这个参数为1时,采样后的图片大小和原来一样;当这个参数为2时,采样后的图片宽高均为原来的1/2,大小也就成了原来的1/4。也就是说,采样后的大小等于原始大小除以采样率的平方。官方文档规定,inSampleSize的值应为2的非负整数次幂(1,2,4,... ),否则会被系统向下取整并找到一个最接近的值。以下是根据计算采样率得出ImageView所期望加载图片大小案例。
参考资料:《Android开发艺术探索》