原文链接:http://www.ytsyt.cn/post/7.html
先转载收藏!
手机的拍照像素越来越高,拍出来的照片效果也会越来越好,但是像素高了照片的容量也就变大了,如果不能处理好bitmap的话很容易导致OOM异常的。以下提供3种解决OOM异常的方案:
一、bitmap不用就就回收掉
Java protected void onDestroy() {
super.onDestroy();
if(bmp1 != null){
bmp1.recycle();
bmp1 = null;
}
if(bmp2 != null){
bmp2.recycle();
bmp2 = null;
}
}
二、先算出该bitmap的大小,然后通过调节采样率的方式来规避,也就是等比例压缩
Java BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inJustDecodeBounds = true;
BitmapFactory.decodeFile(imageFile, opts);
opts.inSampleSize = computeSampleSize(opts, minSideLength, maxNumOfPixels);
opts.inJustDecodeBounds = false;
try {
return BitmapFactory.decodeFile(imageFile, opts);
} catch (OutOfMemoryError err) { }
return null;
三、在进行文件传输时,最好采用压缩的方式变成byte[]再传输
Java public static byte[] bitmap2Bytes(Bitmap bm) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 90, baos);
return baos.toByteArray();
}