当应用需要加载图片时,很有可能图片会比系统的堆内存要大,如果不进行缩放的话会导致应用出错。
//首先得到手机屏幕的宽高
WindowManager wm=(WindowManager)getSystemService(WINDOW_SERVICE);
int windowH=wm.getDefaultDisplay().getHeight();
int windowW=wm.getDefaultDisplay().getWidth();
//android 3.0以后可用
Point outSize=new Point();
wm.getDefaultDisplay().getSize(outSize);
int windowH=outSize.x;
int windowW=outSize.y;
系统上固定的堆内存应该是16M,加载一张高像素的图片很有可能会超过这个大小
//图片解析的配置
BitmapFactory.Options= opts=new Options();
//true代表不进行图片解析
opts.inJustDecodeBounds=true;
//获取图片的高宽
BitmapFactory.decodFile("图片路径名称",opts);
int imageH=opts.outHeight;
int imageW=opts.outWidth;
//计算缩放比例
int scaleX=imageH/windowH;
int scaleY=imageW/windowW;
int scale=1;
if(scaleX>scaleY & scaleY>=1){
scale=scaleX;
}
if(scaleY>scaleX & scaleX>=1){
scale=scaleY;
}
//解析图片
opts.inJustDecodeBounds=false;
opts.inSampleSize=sacle;
//现在得到了图片bitmap
Bitmap bitmap=BitmapFactory.decodFile("图片路径名称",opts);
//假设程序有一个ImageView,这样就加载了一张高像素的图片了
ImageView iv=setImageBitmap(bitmap);