解决OOM问题(压缩图片)
原创
©著作权归作者所有:来自51CTO博客作者xiyangyang8110的原创作品,请联系作者获取转载授权,否则将追究法律责任
OOM,outofMemory,内存溢出,本地加载进内存的数据太多,导致app的应有的内存不足,出现app崩溃的现象。
可以选择将加载进内存的图片进行压缩,因为实际显示的图片大小往往不需要原图那么大。
//压缩图片,显示好的效果同时降低图片大小
private Bitmap compress(String path) {
需要显示的图片宽和高
int maxWidth=306;
int maxHeight=202;
//图片内存压缩
BitmapFactory.Options options=new BitmapFactory.Options();
// String path= Environment.getExternalStorageDirectory()+"/test2.jpg";
//控制我们每个像素占有的字节数
// options.inPreferredConfig= Bitmap.Config.ARGB_8888;
//获取宽高---不加载Bitmap对象
//只加载Bitmap的边,而不加载实际数据
options.inJustDecodeBounds=true;
// Bitmap bitmap= BitmapFactory.decodeFile(path,options);
// Log.e("wy", "不加载实际数据的bitmap:"
// + " "+bitmap+"宽:"+options.outWidth+"高: "+options.outHeight);
//运算缩放比例
int scaleNum=1;
while(options.outWidth/scaleNum>maxWidth ||options.outHeight/scaleNum>maxHeight){
scaleNum*=2;
}
// Log.e("wy", "运算后的缩放倍数:"+scaleNum);
//设置加载图片时的压缩比例
//此处缩放比例,如果该值是2的整数次幂,则直接取值,如果不是,则向下取最近的一个2的整数次幂
options.inSampleSize=scaleNum;
options.inJustDecodeBounds=false;
Bitmap bitmapnew= BitmapFactory.decodeFile(path,options);
// Log.e("wy", "压缩后图片大小:"+bitmapnew.getByteCount()+
// "图片宽高:"+bitmapnew.getWidth()+" "+bitmapnew.getHeight());
return bitmapnew;
}