加载Bitmap对象时出现OutOfMemory

在开发自定义相机应用时遇到OutOfMemory错误,特别是在图像旋转和显示水印时。Android系统默认每个APK最大内存为16MB,当超过此限制时会出现OOM。博客讨论了BitmapFactory.decodeResource和BitmapFactory.decodeStream的源码,指出两者最终调用相同的方法。解决OOM的策略包括:压缩图片、减小Bitmap尺寸(通过设置insampleSize)和及时释放不再使用的Bitmap对象。博主通过调整insampleSize成功解决了问题。
摘要由CSDN通过智能技术生成

最近简单做了一个自定义相机,拍拍照后将加水印显示在拍照界面的右下角,类似于android的原生相机,但是在拍照及显示的过程中,总会出现

OutOfMemory这个错误,下面总结一个解决这个问题的方法。

先说一下这个Bug出现的场景:由于自定义相机的预览窗口需要进行旋转才能正常预览,但是在获取到拍照后的图片也需要进行旋转,要不然就

和预览窗口未旋转之前的一样,在旋转之后就需要获取水印图片的bitmap对象,然后进行原图和水印图的合成,合成之后将图像保存到sd中,以

及在ImageView中显示出来在上水印时需要重新建立一个Bitmap对象,然后使用Canvas将原图和水印图画上去。如果不进行图像旋转则不会出现

OOM现象,在进行旋转的情况下,将图片显示出来,多拍几张就会出现OOM现象,在图像旋转和图片显示的情况下,在水印图创建时则会出现

OOM现象。也就是在createBitmap这个方法调用时很容易出现OOM现象。

出现OOM现象的原因:由于android dalvik的机制,其默认每单个apk默认的最大内存为16M,如果apk运行时的占用内存超过这个阈值,则会出

现OOM现象。在csdn上看到了一篇博客:android bitmap out of memory总结、心得,我求证了一下,在这里顺带辟谣一下,我看的是

android4.03的源码在这篇博客中所说的BitmapFac

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值