android 查看图片缩略图
扫描二维码
随时随地手机看文章
在android中,图片使用上,往往会出现OOM(out of memory)的情况,在这里,我将总结一些办法,来避免OOM的问题。
先看一张图:
这张图里,使用的gridView来显示图片,如果图片数目很多,上下滚动的时候,很容易出现OOM的情况。
这里,每张图片的实际像素是320*480.这里缩放后,每张图片的大小是100*100.、
缩放代码如下:
Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(imagePath, options); int scale = 1; while (true) { if (options.outWidth / 2 >= width && options.outHeight / 2 >= height) { options.outWidth /= 2; options.outHeight /= 2; scale++; } else { break; } } Log.i(TAG, "inSampleSize=" + scale); options.inSampleSize = scale; options.inJustDecodeBounds = false; return BitmapFactory.decodeFile(imagePath, options);
做点说明:
Options这个类,有两个重要的属性。分别是inJustDecodeBounds 和inSampleSize。
inJustDecodeBounds 表示是否只是解码边界信息,也就是,这段代码
BitmapFactory.decodeFile(imagePath, options);
之后,options里会存储该图片的高度和宽度信息,而此时返回的bitmap是为null的。
得到了图片的高度和宽度之后,我们再看下一个属性inSampleSize,这个属性可以理解为缩放比例,是int类型,缩放比例为2的指数倍
比如说inSampleSize=1时,则表示不缩放,inSampleSize=2时,表示长和宽都分别缩小到原来的1/2*2,即四分之一,同理为3时则为九分之一。
最后缩放出来的大小,并不是能和要求的大小一模一样,但是不会小于指定的长和宽,可以在LayoutParams里指定长和宽,即达到了图上的效果。