用Bitmap加载图片资源时,报错java.lang.OutOfMemoryError: bitmap size exceeds VM budget的解决办法

当在Android系统中使用Bitmap加载图片资源时,可能会遇到java.lang.OutOfMemoryError: bitmap size exceeds VM budget的错误。解决方案包括增大VM应用堆大小或通过BitmapFactory.Options的inSampleSize属性压缩图片。适当设置inSampleSize可以减少Bitmap占用的内存,避免内存溢出。Android还提供了一个动态计算inSampleSize的算法,确保图片尺寸在指定范围内。此外,及时调用Bitmap的recycle()方法也能有效释放不再使用的位图资源。
摘要由CSDN通过智能技术生成


android系统限制,只给图片分配8兆的内存,超过就崩,你图片几十KB,可能是压缩格式的,转换成bitmap就是本来的大小。

在使用模拟器时,出现以上错误,怎么办呢?

1.方法一:增大限制:在设置VM的时候,在Hardware选项中,有一项Max VM application heap size,将该项的值增大(默认值是24,可以增到60等等)


2.方法二:压缩图片,并及时回收不再使用的Bitmap

BitmapFactory.Options.inSampleSize

设置恰当的inSampleSize可以使BitmapFactory分配更少的空间以消除该错误。inSampleSize的具体含义请参考SDK文档。例如:

  1.         BitmapFactory.Options opts =  new  BitmapFactory.Options();
  2.         opts.inSampleSize =  4 ;
  3.         Bitmap bitmap = BitmapFactory.decodeFile(imageFile, opts);
复制代码

如何设置恰当的inSampleSize

设置恰当的inSampleSize是解决该问题的关键之一。BitmapFactory.Options提供了另一个成员inJustDecodeBounds。

  1.         BitmapFactory.Options opts =  new  BitmapFactory.Options();
  2.         opts.inJustDecodeBounds =  true ;
  3.         Bitmap bitmap = BitmapFactory.decodeFile(imageFile, opts);
复制代码


设置inJustDecodeBounds为true后,decodeFile并不分配空间,但可计算出原始图片的长度和宽度,即opts.width和opts.height。有了这两个参数,再通过一定的算法,即可得到一个恰当的inSampleSize。

查看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值