当前位置:编程学习 > JAVA >>

Java乔晓松-android中获取图片的缩略图(解决OutOfMemoryError)内存溢出的Bug

由于android获取图片过大是会出现内存溢出的Bug


 

?07-02 05:10:13.792: E/AndroidRuntime(6016): java.lang.OutOfMemoryError 

07-02 05:10:13.792: E/AndroidRuntime(6016): java.lang.OutOfMemoryError

解决这个Bug的方法就是获取该图片的缩略图,android中的内存是很宝贵的,所以我们就的进一步处理了

 

获取缩略图的代码如下:

 

 

  

//第一个参数是图片的路径,第二个参数是获取到的缩略图的宽度,第三个参数是获取到的缩略图的高度 

//第一个参数是图片的路径,第二个参数是获取到的缩略图的宽度,第三个参数是获取到的缩略图的高度
  private static Bitmap getImageThumbnail(String imagePath, int width, 
            int height) { 
        Bitmap bitmap = null; 
        BitmapFactory.Options options = new BitmapFactory.Options(); 
        options.inPreferredConfig = Bitmap.Config.ARGB_4444; 
        options.inPurgeable = true; 
        options.inInputShareable = true; 
        options.inJustDecodeBounds = true; 
        // 获取这个图片的宽和高,注意此处的bitmap为null 
        bitmap = BitmapFactory.decodeFile(imagePath, options); 
        options.inJustDecodeBounds = false; // 设为 false 
        // 计算缩放比 
        int h = options.outHeight; 
        int w = options.outWidth; 
        int beWidth = w / width; 
        int beHeight = h / height; 
        int be = 1; 
        if (beWidth < beHeight) { 
            be = beWidth; 
        } else { 
            be = beHeight; 
        } 
        if (be <= 0) { 
            be = 1; 
        } 
        options.inSampleSize = be; 
        // 重新读入图片,读取缩放后的bitmap,注意这次要把options.inJustDecodeBounds 设为 false 
        bitmap = BitmapFactory.decodeFile(imagePath, options); 
        // 利用ThumbnailUtils来创建缩略图,这里要指定要缩放哪个Bitmap对象 
        bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height, 
                ThumbnailUtils.OPTIONS_RECYCLE_INPUT); 
        return bitmap; 
    } 

private static Bitmap getImageThumbnail(String imagePath, int width,
   int height) {
  Bitmap bitmap = null;
  BitmapFactory.Options options = new BitmapFactory.Options();
  options.inPreferredConfig = Bitmap.Config.ARGB_4444;
  options.inPurgeable = true;
  options.inInputShareable = true;
  options.inJustDecodeBounds = true;
  // 获取这个图片的宽和高,注意此处的bitmap为null
  bitmap = BitmapFactory.decodeFile(imagePath, options);
  options.inJustDecodeBounds = false; // 设为 false
  // 计算缩放比
  int h = options.outHeight;
  int w = options.outWidth;
  int beWidth = w / width;
  int beHeight = h / height;
  int be = 1;
  if (beWidth < beHeight) {
   be = beWidth;
  } else {
   be = beHeight;
  }
  if (be <= 0) {
   be = 1;
  }
  options.inSampleSize = be;
  // 重新读入图片,读取缩放后的bitmap,注意这次要把options.inJustDecodeBounds 设为 false
  bitmap = BitmapFactory.decodeFile(imagePath, options);
  // 利用ThumbnailUtils来创建缩略图,这里要指定要缩放哪个Bitmap对象
  bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,
    ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
  return bitmap;
 }

 

 

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,