加载大图片导致OOM异常 OOM:内存溢出(图片太大导致)
Caused by:java.lang.OutOfMemoryError:bitmap size exceeds VM budget at android.graphics.BitmapFactory.nativeDecodeStream(Native Method); 本身的大小:2.65MB dalvik vm默认:16MB(一个虚拟机实例默认只有16M内存)
Caused by:java.lang.OutOfMemoryError:bitmap size exceeds VM budget at android.graphics.BitmapFactory.nativeDecodeStream(Native Method);
本身的大小:2.65MB
dalvik vm默认:16MB(一个虚拟机实例默认只有16M内存)
dalvikvm-heap:15980544-byte external allocation too large for this process.因为图片尺寸太大;
解决的思路:
decodeFile(String pathName, Options opts)
缩放加载大图片(缩放加载,计算缩放比率)
★计算缩放比率,图片的宽高与手机的宽高进行对比 此段代码都在单击方法中
1)选择类型:
Options opts = new Options();
只会解析图片的大小信息,不会加载图片到手机屏幕:
opts.inJustDecodeBounds = true;
设置路径,加载图片:
BitmapFactory.decodeFile("/sdcard/xxx.JPG", opts);
2)获取到图片的宽高:
获取到图片的宽:
int outWidth = opts.outWidth;
获取到图片的高:
int outHeight = opts.outHeight;
3)获取手机屏幕的显示对象 得到窗体对象 得到窗体管理器 得到显示对象
Displaydisplay=getWindow().getWindowManager().getDefaultDisplay()
获取手机屏幕的宽:
int width = display.getWidth();
获取手机屏幕的高:
int height = display.getHeight();
4)把图片的宽高与手机的宽高进行对比:
int scale = 0;
int scaleX = outWidth/width; 宽/宽
int scaleY = outHeight/height;高/高
scale = scaleX > scaleY?scaleX:scaleY;
加载图片到屏幕:记载图片的数据
opts.inJustDecodeBounds = false;
指定图片加载时的缩放比率:
opts.inSampleSize = scale;
加载图片的真实数据:
Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/xxx.JPG", opts);
iv.setImageBitmap(bitmap);
更多推荐
所有评论(0)