首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > Ruby Rails >

java.lang.OutOfMemoryError: bitmap size exceeds VM budget解决办法

2012-08-08 
java.lang.OutOfMemoryError: bitmap size exceeds VM budget解决方法最近在做电信的一个视频地图项目时,

java.lang.OutOfMemoryError: bitmap size exceeds VM budget解决方法
最近在做电信的一个视频地图项目时,需要获取网络图片预览,用到图片缩略图技术,通过参考了很多同行的方法,本人写了以下获取网络图片缩略图的代码,如有不妥,望高手指正,谢谢。以下是实现方法:


获取缩略图关键代码

 byte[] imageByte=getImageFromURL(urlPath[i].trim());//以下是把图片转化为缩略图再加载BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true;      //首先设置.inJustDecodeBounds为trueBitmap bitmap=BitmapFactory.decodeByteArray(imageByte, 0, imageByte.length, options);    //这时获取到的bitmap是null的,尚未调用系统内存资源options.inJustDecodeBounds = false;        得到图片有宽和高的options对象后,设置.inJustDecodeBounds为false。int be = (int)(options.outHeight / (float)200);         if (be <= 0)   be = 1;         options.inSampleSize = be;          //计算得到图片缩小倍数bitmaps[i]=BitmapFactory.decodeByteArray(imageByte, 0, imageByte.length,options);                          //获取真正的图片对象(缩略图) 






以下是批量获取网络图片缩略图的详细代码:

 /**       * 根据图片网络地址获取图片的byte[]类型数据       * @param urlPath 图片网络地址       * @return 图片数据       */      public byte[] getImageFromURL(String urlPath){          byte[] data=null;          InputStream is=null;          HttpURLConnection conn=null;          try {              URL url=new URL(urlPath);              conn=(HttpURLConnection) url.openConnection();              conn.setDoInput(true);              //conn.setDoOutput(true);              conn.setRequestMethod("GET");              conn.setConnectTimeout(6000);              is=conn.getInputStream();              if(conn.getResponseCode()==200){                  data=readInputStream(is);              }              else  System.out.println("发生异常!");                        } catch (MalformedURLException e) {              e.printStackTrace();          } catch (IOException e) {              e.printStackTrace();          }          finally{              conn.disconnect();              try {                  is.close();              } catch (IOException e) {                  e.printStackTrace();              }          }          return data;      }            /**       * 读取InputStream数据,转为byte[]数据类型       * @param is  InputStream数据       * @return  返回byte[]数据       */      public byte[] readInputStream(InputStream is) {          ByteArrayOutputStream baos=new ByteArrayOutputStream();          byte[] buffer=new byte[1024];          int length=-1;          try {              while((length=is.read(buffer))!=-1){                  baos.write(buffer, 0, length);              }              baos.flush();          } catch (IOException e) {              e.printStackTrace();          }          byte[] data=baos.toByteArray();          try {              is.close();              baos.close();          } catch (IOException e) {              e.printStackTrace();          }          return data;      }            /**       * 根据网络图片地址集批量获取网络图片       * @param urlPath  网络图片地址数组       * @return    返回Bitmap数据类型的数组       */      public Bitmap[] getBitmapArray(String[] urlPath){          int length=urlPath.length;          if(urlPath==null||length<1){              return null;          }          else{              Bitmap[] bitmaps=new Bitmap[length];              for (int i = 0; i < length; i++) {                  byte[] imageByte=getImageFromURL(urlPath[i].trim());                                    //以下是把图片转化为缩略图再加载                  BitmapFactory.Options options = new BitmapFactory.Options();                   options.inJustDecodeBounds = true;                  Bitmap bitmap=BitmapFactory.decodeByteArray(imageByte, 0, imageByte.length, options);                  options.inJustDecodeBounds = false;                  int be = (int)(options.outHeight / (float)200);                   if (be <= 0)   be = 1;                   options.inSampleSize = be;                   bitmaps[i]=BitmapFactory.decodeByteArray(imageByte, 0, imageByte.length,options);              }              return bitmaps;          }                }  

热点排行