最近简单做了一个自定义相机,拍拍照后将加水印显示在拍照界面的右下角,类似于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