- 浏览: 237620 次
- 性别:
- 来自: 内蒙古
文章分类
- 全部博客 (236)
- Android 功能实现 (31)
- sql数据库的学习 (8)
- Android 美化界面 (2)
- Android 优化 (1)
- Ruby on Rails 方面 (45)
- git 方面的学习 (1)
- ruby 编程的琢磨 (13)
- linux下工具软件 (13)
- 操作系统的学习 (40)
- 非技术 (13)
- 网站开发 (18)
- js 学习笔记 (19)
- css学习 (5)
- 回顾总结 (2)
- Delphi 学习 (2)
- C 语言学习笔记 (1)
- 数据结构 (1)
- node js 学习 (6)
- 设计模式 (2)
- mongdb 学习笔记 (0)
- 软件服务 (3)
- osx系统 (4)
- 搜索引擎 (1)
- 测试工具 (1)
- Aliyun (1)
- 前端JS (1)
- python学习 (0)
- iOS系统 (1)
- 分布式锁 (1)
- 开发工具 (0)
- java代码 (2)
- java (0)
最新评论
-
jiguanghover:
写的不错,收藏一下
Ubuntu下RVM, Ruby, rails安装详细 和 卸载 -
maoghj:
回顾总结(二) -
yun2223:
对楼主表示感谢
Android控件开发之Gallery3D效果 -
zw_lovec:
说清楚点吧 亲 加点注释
out of memory -
lzyfn123:
http://www.iteye.com/images/smi ...
ruby-string 字符串的学习
解决java.lang.OutOfMemoryError
当图片过大,或图片数量较多时使用BitmapFactory解码图片会出java.lang.OutOfMemoryError: bitmap size exceeds VM budget,要想正常使用则需分配更少的内存,具体的解决办法是修改采样值BitmapFactory.Options.inSampleSize,例 如:
- BitmapFactory.Options opts = new BitmapFactory.Options();
- opts.inSampleSize = 4 ;
- Bitmap bitmap = BitmapFactory.decodeFile(imageFile, opts);
如何设置恰当的inSampleSize
设置恰当的inSampleSize是解决该问题的关键之一。BitmapFactory.Options提供了另一个成员inJustDecodeBounds。
- BitmapFactory.Options opts = new BitmapFactory.Options();
- opts.inJustDecodeBounds = true ;
- Bitmap bitmap = BitmapFactory.decodeFile(imageFile, opts);
设置inJustDecodeBounds为true后,decodeFile并不分配空间,但可计算出原始图片的长度和宽度,即opts.width和opts.height。有了这两个参数,再通过一定的算法,即可得到一个恰当的inSampleSize。
查看Android源码,Android提供了一种动态计算的方法。
- public static int computeSampleSize(BitmapFactory.Options options,
- int minSideLength, int maxNumOfPixels) {
- int initialSize = computeInitialSampleSize(options, minSideLength,maxNumOfPixels);
- int roundedSize;
- if (initialSize <= 8 ) {
- roundedSize = 1 ;
- while (roundedSize < initialSize) {
- roundedSize <<= 1 ;
- }
- } else {
- roundedSize = (initialSize + 7 ) / 8 * 8 ;
- }
- return roundedSize;
- }
- private static int computeInitialSampleSize(BitmapFactory.Options options, int minSideLength, int maxNumOfPixels) {
- double w = options.outWidth;
- double h = options.outHeight;
- int lowerBound = (maxNumOfPixels == - 1 ) ? 1 :
- (int ) Math.ceil(Math.sqrt(w * h / maxNumOfPixels));
- int upperBound = (minSideLength == - 1 ) ? 128 :
- (int ) Math.min(Math.floor(w / minSideLength),
- Math.floor(h / minSideLength));
- if (upperBound < lowerBound) {
- // return the larger one when there is no overlapping zone.
- return lowerBound;
- }
- if ((maxNumOfPixels == - 1 ) &&
- (minSideLength == -1 )) {
- return 1 ;
- } else if (minSideLength == - 1 ) {
- return lowerBound;
- } else {
- return upperBound;
- }
- }
使用该算法,就可动态计算出图片的inSampleSize。
- BitmapFactory.Options opts = new BitmapFactory.Options();
- opts.inJustDecodeBounds = true ;
- BitmapFactory.decodeFile(imageFile, opts);
- opts.inSampleSize = computeSampleSize(opts, -1 , 128 * 128 );
- opts.inJustDecodeBounds = false ;
- try {
- Bitmap bmp = BitmapFactory.decodeFile(imageFile, opts);
- imageView.setImageBitmap(bmp);
- } catch (OutOfMemoryError err) {
- }
另外,可以通过Bitmap.recycle()方法来释放位图所占的空间,当然前提是位图没有被使用。
发表评论
-
Android里的音量调节
2013-04-01 13:37 1323步骤1:或许系统音量 ... -
Android Camera 方法分析
2012-03-29 10:52 3489Android Camera源码分析 android通 ... -
MyCameraActivity
2012-03-29 10:10 678package cn.fn; import android. ... -
MyCameraActivity
2012-04-01 13:27 873package cn.fn; import android. ... -
android AutoCompleteTextView+ SQLite
2012-03-21 13:33 1092android AutoCompleteTextView+ S ... -
android 异步回调加载网络图片
2012-03-20 11:50 917在做应用的时候很多时候都会去从网络加载图片,而且还要做各种各样 ... -
ProgressBar+AsyncTask 实现界面数据异步加载
2012-03-20 10:09 1603ProgressBar+AsyncTask 实现界面数据异步 ... -
Android 网络图片异步加载实例
2012-03-20 10:04 953Android 网络图片异步加载实例 ... -
android Text 删除线
2012-03-16 19:35 1151import android.app.Activit ... -
android Gallery 详解
2012-03-14 14:17 1503android Gallery 正文 ... -
Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask,Task,AsynTask等
2012-03-14 11:43 1437Android的线程使用来更新UI----Thread、Han ... -
AsyncTask的使用
2012-03-14 10:59 791AsyncTask的使用 ... -
Android控件开发之Gallery3D效果
2012-03-13 14:38 2861Android控件开发之Gal ... -
android GridView
2012-03-08 10:28 906主类 import android.app.Activi ... -
ListView异步加载图片是非常实用的方法
2012-03-08 10:09 930ListView异步加载图片是非常实用的方法,凡是是要通过网络 ... -
复制assets下的数据库到SD卡
2012-03-07 10:56 1209首先使用sqliteadDev(一个windows下图形化sq ... -
Android异步加载图像小结
2012-03-06 16:46 593Android异步加载图像小结 (1)由于an ... -
AutoCompleteTextView
2012-03-05 14:53 1416AutoCompleteTextView ... -
android 动态加载List
2012-03-05 11:11 980main.xml <?xml ver ... -
AutoCompleteTextView
2012-03-02 16:17 1046public class CityAdapter<T& ...
相关推荐
报错 java.lang.OutOfMemoryError: PermGen space 报错 java.lang.OutOfMemoryError: Java heap 启动报错java.lang.ClassNotFoundException: 1catalina.org.apache.juli.FileHandler JAVA_OPTS="-server -Xms800m ...
java.lang.OutOfMemoryError: Java heap space 解决方法
搜集整理关于java错误处理:java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError: Java heap space 资料整理
java解决nested exception is java.lang.OutOfMemoryError Java heap space 解决OOM
java.lang.OutOfMemoryError: PermGen space 解决方案
Myeclipse下java.lang.OutOfMemoryError Java heap space的解决
java.lang.OutOfMemoryError处理错误
Caused by: java.lang.OutOfMemoryError: PermGen space解决方案, avax.servlet.ServletException: java.lang.OutOfMemoryError: PermGen space at org.apache.jasper.servlet.JspServlet.service(JspServlet.java...
记录java.lang.OutOfMemoryError:Java heap space的情况 文章内容: 一.问题描述+原因分析+解决方案 二.JVM调优说明 三.Tomcat添加到jvisualvm监控
内存不足OOM java.lang.OutOfMemoryError.
java.lang.OutOfMemoryError: Java heap space 解决方法
编译时出现java.lang.OutOfMemoryError Java heap space异常.
java.lang.OutOfMemoryError: PermGen space及其解决方法,解决项目太大tomcat内存溢出
NULL 博文链接:https://geyubin.iteye.com/blog/779330
Tomcat内存溢出的解决方法(java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError),内附解决方案!
java[1].lang.OutOfMemoryError_Java_heap_space错误及处理办法java[1].lang.OutOfMemoryError_Java_heap_space错误及处理办法java[1].lang.OutOfMemoryError_Java_heap_space错误及处理办法
Eclipse中通过Tomcat运行J2EE项目java.lang.OutOfMemoryError PermGen space的解决方案
下面小编就为大家带来一篇完美解决java.lang.OutOfMemoryError处理错误的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Tomcat给我的java.lang.OutOfMemoryError: PermGenTomcat给我的java.lang.OutOfMemoryError: PermGenTomcat给我的java.lang.OutOfMemoryError: PermGenTomcat给我的java.lang.OutOfMemoryError: PermGenTomcat给我的...