(java.lang.OutOfMemoryError: bitmap size exceeds VM budget解决)android中将网络图片转化为缩略图
?
??
?
最近在做电信的一个视频地图项目时,需要获取网络图片预览,用到图片缩略图技术,通过参考了很多同行的方法,本人写了以下获取网络图片缩略图的代码,如有不妥,望高手指正,谢谢。以下是实现方法:
?
?
获取缩略图关键代码
?
?
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 再次谢谢一些同行的,是他们给我了很多提示