Android开发之大图片加载内存溢出

来源:互联网 发布:形容男生的网络词语 编辑:程序博客网 时间:2024/05/01 03:21

缩放加载加载大图片(使用大图片时可能出现的异常)

Caused by: java.lang.OutOfMemoryError

PS:
图片宽高:2400*3200
手机屏幕大小:320*480
宽缩放: 7
高缩放: 6

需要考虑的问题:
(1)动态获取图片的分辨率
(2)动态获取手机分辨率

实现步骤

(1)获取手机屏幕的宽和高

WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);  Display display = windowManager.getDefaultDisplay();  int screenWidth = display.getWidth();  int screenHeight = display.getHeight();  

(2)获取图片的宽和高

//创建BitmapFactor的配置参数  BitmapFactory.Options options = new Options();  //设置options的inustDecodeBounds值为true  options.inJustDecodeBounds = true;  //此时BitmapFactory.decode方法并不会去真正加载图片,但是可以返回图片的一些信息(如宽和高)  BitmapFactory.decodeResource(getResources(),                    R.drawable.ic_launcher, options);  //根据options的配置信息获取图片的宽和高  int imgWidth = options.outWidth;  int imgHeight = options.outHeight;  

(3)计算缩放比

 int scale = 1;//默认的缩放比   int scaleX = imgWidth/screenWidth;//图片宽的缩放比   int scaleY = imgHeight/screenHeight;//图片高的缩放比   if(scaleX>scaleY && scaleX>scale){   //当宽的缩放比大于高的缩放比,并且缩放比大于默认缩放比时,将宽的缩放比赋给默认缩放比          scale = scaleX;     }else if(scaleY>scaleX && scaleY>scale){          scale = scaleY;    }

(4)按照缩放比显示图片

//根据inSampleSize(采样率)来进行缩放,当inSampleSize为2时,图片缩放为原图大小的1/4;  options.inSampleSize = scale;//设置options.inJustDecodeBounds值为false,即开始真正加载图片  options.inJustDecodeBounds = false;  Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher, options);  iv.setImageBitmap(bitmap);  
0 0
原创粉丝点击