这两天在做的一个app需要从相册里面载入图片,踩了几个坑,这里Mark一下。
现在的相机基本都是800W+像素,差一点的手机1M多,好点的手机拍出来接近3M,如果直接载入图片,那非常容易造成oom,尤其是在差的手机上面。因此就需要对图像进行压缩处理。
先是在百度上搜了一把,比较多的解决方案都是使用Bitmap.compress()这个方法,那我也就跟着用了咯,使用形式如下:
ByteArrayOutputStream out = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 80, out);
imageView.setImageBitmap(bm);
其实80的品质,就保留原图像80%的品质,压缩20%,看上去挺正确的,压缩个20%,可以变小一点点。
然后在差的手机上运行,继续会crash。通过Android Monitor查看App的内存状况,发现从相册载入图片时,内存依然会猛的增长2M左右的样子(选取的图片大小在1.5M左右)。就结果而看这个方法并不有用,随即开始打log,看各个变量的详细数据。
然后发现了与理解有偏差的地方!
int len = bm.