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

(java.lang.OutOfMemoryError: bit地图 size exceeds VM budget解决)android中将网络图片转化为缩略图

2012-07-05 
(java.lang.OutOfMemoryError: bitmap size exceeds VM budget解决)android中将网络图片转化为缩略图???ja

(java.lang.OutOfMemoryError: bitmap size exceeds VM budget解决)android中将网络图片转化为缩略图

?

??

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

?

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

?

?

获取缩略图关键代码

?

?

byte[] imageByte=getImageFromURL(urlPath[i].trim());

//以下是把图片转化为缩略图再加载

BitmapFactory.Options options = new BitmapFactory.Options();?

options.inJustDecodeBounds = true; ? ? ?//首先设置.inJustDecodeBounds为true

Bitmap 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;}}
?

?

参考文章:http://www.cnblogs.com/RayLee/archive/2010/11/09/1872856.html

?


?

1 楼 黑洞风 2011-08-19   再次谢谢一些同行的,是他们给我了很多提示

热点排行