Android中读取大图片到内存(利用Bitmap缩放)

Posted Cokernut_林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android中读取大图片到内存(利用Bitmap缩放)相关的知识,希望对你有一定的参考价值。

个人主页

当我们在App中要加载大图片时,很多时候Logcat会报出OutOfMemoryError的错误,同时会导致App崩溃。这是因为Dalvik虚拟内存小于加载图片需要的内存导致的,这时我们就可以用到Bitmap来缩放图片实现图片的成功加载。直接上代码:

public class MainActivity extends Activity 
private ImageView imageView;
private int windowheight;
private int windowwidth;
 @Override
 protected void onCreate(Bundle savedInstanceState) 
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  imageView = (ImageView) findViewById(R.id.imageView);

//获取窗口管理者
  WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);

//获取窗口的高和宽
  windowheight = wm.getDefaultDisplay().getHeight();
  windowwidth = wm.getDefaultDisplay().getWidth();
/*  //没过时的方法 android3.0开始的
  Point outSize = new Point();
  wm.getDefaultDisplay().getSize(outSize);
  windowwidth=outSize.x;
  windowheight=outSize.y;*/
 




//实现Button的点击事件

 public void loadImage(View view )
//  Bitmap bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageState()"+"/***.jpg");
//  imageView.setImageBitmap(bitmap);
  //图片解析配置
  BitmapFactory.Options opts = new Options();
  //不解析,只是获取图片的头部信息(宽高)
  opts.inJustDecodeBounds = true;
  BitmapFactory.decodeFile(Environment.getExternalStorageState()"+"/***.jpg", opts);
  int imageHeight = opts.outHeight;
  int imageWidth = opts.outWidth;
//  System.out.println("图片宽:" + imageWidth + " 高:" + imageHeight);
  //计算缩放比例
  int scaleX = imageWidth/windowwidth;
  int scaleY = imageHeight/windowheight;
  int scale = 1;
  if (scaleX > scaleY && scaleY > 1) 
   scale = scaleX;
  
  if (scaleY > scaleX && scaleX > 1) 
   scale = scaleY;
  
  //此时准备解析图片
  opts.inJustDecodeBounds = false;
  //设置缩放比 
  opts.inSampleSize = scale;
  Bitmap bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageState()"+"/***.jpg",opts);
  imageView.setImageBitmap(bitmap);
 


xml布局文件里面就一个ImageView和一个Button就不上传了!

以上是关于Android中读取大图片到内存(利用Bitmap缩放)的主要内容,如果未能解决你的问题,请参考以下文章

Bitmap 内存优化

Android内存优化1-对Bitmap的内存优化

Android知识要点整理----Bitmap图片处理和展示

BitMap 内存使用优化

Bitmap——基础

Android BitmapFactory.Options 解决大图片加载OOM问题