- 浏览: 75751 次
- 性别:
- 来自: 成都
-
文章分类
最新评论
最近在做电信的一个视频地图项目时,需要获取网络图片预览,用到图片缩略图技术,通过参考了很多同行的方法,本人写了以下获取网络图片缩略图的代码,如有不妥,望高手指正,谢谢。以下是实现方法:
获取缩略图关键代码
以下是批量获取网络图片缩略图的详细代码:
获取缩略图关键代码
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; } }
发表评论
-
android检测当前网络是否可用
2012-05-28 20:43 1146在android程序中运行第一步就是检测当前有无可用网络 如 ... -
java面试之抽象类和接口知识点
2012-05-27 18:13 8491.abstract class 在 Java 语 ... -
点击两次back退出程序
2012-04-17 22:48 984private long exitTime = 0; ... -
【转】爱上Android“9妹”
2012-01-17 17:38 837前几天群成员讨论过关于9patch的工具【我比较喜欢喊它9妹子 ... -
【转】android service 学习(下)
2012-01-13 22:43 764通常每个应用程序都在它自己的进程内运行,但有时需要在进程间传递 ... -
【转】android service 学习(上)
2012-01-13 22:31 740Service是android 系统中的一种组件,它跟Acti ... -
ndroid 使用代码打开浏览器,打电话,开地图
2011-11-03 13:37 8881,调用web浏览器 Uri myBlogUri = Uri. ... -
【转】Android中的.9.png图形的机制及制作和使用方法
2011-10-25 10:31 1726转至:http://blog.sina.com.cn/s/bl ... -
MIUI直刷正确开启A2SD+的方法(htc系)
2011-10-21 18:32 1173第一步:在Recovery里对 SD卡进行分区 : 分区后 ... -
自定义Android 标题栏TitleBar布局
2011-10-21 18:09 3586自定义Android 标题栏TitleBar布局 方法一、 ... -
Android 去掉title bar的3个方法
2011-09-26 14:44 166511. Java代码实现 @Override public v ... -
Android平台显示单位px和dip以及sp的区别
2011-06-08 15:55 880很多网友可能发现在Android的layout文件中layou ... -
【转】禁止android横屏和竖屏的切换
2011-06-01 15:42 1654在某些场合可能需要禁止横屏和竖屏切换,实现这个要求很简单,只要 ... -
【转】动画的两种实现模式Animation
2011-05-10 21:05 1338关于动画的实现,Android提供了Animation,在 ... -
【转】动画的实现Animation
2011-05-10 20:59 0关于动画的实现,Android ... -
【转】TextView如何高亮显示文本
2011-05-09 16:25 956转自:http://dev.10086.cn/blog/?ui ... -
【转】android 图片自动切换
2011-05-01 22:33 1387图片自动切换 res/drawable/update.xml ... -
【转】PendingIntent和Intent的区别
2011-04-27 13:54 769Notification n = new Notificati ... -
【转】 AutoCompleteTextView和MultiAutoCompleteTextView的区别
2011-04-26 10:28 1243android提供了自动提示功能的textview,按照自 ...
相关推荐
在 Android 中,用 bitmap 时很容易内存溢出,报如下错误:Java.lang.OutOfMemoryError:bitmap size exceeds VM budget。解决这个问题可以通过手动干涉 GC 去处理 bitmap 设置图片尺寸,避免内存溢出。 例如: ```...
当应用程序尝试加载或操作一张超出虚拟机内存预算的`Bitmap`时,系统会抛出`java.lang.OutOfMemoryError: bitmap size exceeds VM budget`异常,导致应用崩溃。为了解决这个问题,开发者需要采取一些策略来优化图片...
E/AndroidRuntime(12517): java.lang.OutOfMemoryError: bitmap size exceeds VM budget ``` 这段日志显示了当尝试分配1MB内存时,由于超出了24MB的限制,导致了应用崩溃。 #### 三、解决方案 针对这个问题,...
当应用尝试加载超出虚拟机内存预算的大图片时,会抛出一个常见的异常java.lang.OutOfMemoryError: bitmap size exceeds VM budget。图片加载时的内存溢出主要因为大尺寸图片占用的内存远远超过了分配给应用的内存...
当Android系统尝试分配一块超过其当前可用内存大小的内存时,会抛出`java.lang.OutOfMemoryError: bitmap size exceeds VM budget`异常。从日志可以看出,问题出现在尝试解码一个资源(可能是图片)到Bitmap对象时,...
当尝试加载大尺寸的图片时,可能会遇到`java.lang.OutOfMemoryError: bitmap size exceeds VM budget`错误,这是因为Android虚拟机(VM)的内存预算有限,尤其是对于较大的图片,如果直接加载原图,会消耗大量内存,...
频繁使用静态的Bitmap或Drawable可能导致`java.lang.OutOfMemoryError: bitmap size exceeds VM budget`异常,因此应谨慎使用。 第三种方法是基于外部存储的数据传输,包括File、SharedPreferences、SQLite和...