高效加载Bitmap
高效加载Bitmap:
为了防止加载bitmap出现oom的情况,我们一般需要缩小一个bitmap的大小。缩小内存大小有个办法,首先你可以降低图片的采样率。在BitmapFactory.Options里面可以设置参数imSampleSize的值(采样率)。当imSampleSize = 1,表示原图;当imSampleSize = 2,表示宽高都缩小2倍,整体像素为原来的1/4。
现在结合一个实际情况来讲:比如ImageView的大小是100 * 100。而图片原始大小为200 * 200,那么采样率inSampleSize设为2最合适,那代码怎么写呢?
- 讲BitmapFactory.Options的inJustDecodeBounds参数设置为true。并加载图片。
- 讲BitmapFactory.Options中取出图片的原始宽高,他们对应的是outwidth和outHeight.
- 根据采样率的规则结合目标View的所需大小计算出采样率inSampleSize
- 将BitmapFactory.Options的inJustDecodeBounds参数设置为fasle,然后重新加载图片。
1 | public static Bitmap decodeSampleBitMapFromResource(Resource res,int resId,int reqWidth,int reqHeight){ |
有了上面这个方法就很简单了,比图ImageView所期望的图片大小为100*100,那么我们就可以高效的加载了:
1 | mImageView.setImageBitmap(decodeSampleBitmapFromResource(getResource(),R.id.bg,100,100)); |