为什么要进行二次采样?
在手机上显示一张分辨率特别大的图片和显示一张分辨率小的图片,对用户的视觉体验来说,并不会有多大变化,但是对我们手机的内存来说,影响却是非常巨大的。,二次采样就是为了避免图片加载时的内存溢出异常。
二次采样分别是哪两次
1.第一次采样
第一次采样我主要是想要获得图片的压缩比例,假如说我有一张图片是200*200,那么我想把这张图片的缩略图显示在一个50*50的ImageView上,那我的压缩比例应该为4,那么这个4应该怎么样来获得呢?这就是我们第一步的操作了,我先加载图片的边界到内存中,这个加载操作并不会耗费多少内存,加载到内存之后,我就可以获得这张图片的宽高参数,然后根据图片的宽高,再结合控件的宽高计算出缩放比例。
2.第二次采样
在第一次采样的基础上,我来进行二次采样。二次采样的时候,我把第一次采样后算出来的结果作为一个参数传递给第BitmapFactory,这样在加载图片的时候系统就不会将整张图片加载进来了,而是只会加载该图片的一张缩略图进来,这样不仅提高了加载速率,而且也极大的节省了内存,而且对于用户来说,他也不会有视觉上的差异。
代码分析
BitmapFactory是安卓系统解析图片资源的一个常用工具类。其基本的使用方式分为两种:解析系统内部图片资源和解析网络图片资源。
新建一个BitMapUtils类传入要加载图片的路径,显示图片的控件宽度和高度
public class BitmapUtils {
public static