我有一个 1000x1500 像素位图,我想在 Android 中制作一个可变副本。
当我运行以下代码时...
// int width = original.getWidth(); // 1000px
// int height = original.getHeight(); // 1500px
final Bitmap result = original.copy(original.getConfig(), true);
original.recycle();
...我得到一个OutOfMemoryError
on the copy
line:
java.lang.OutOfMemoryError: bitmap size exceeds VM budget
ERROR/GraphicsJNI(419): VM won't let us allocate 6000000 bytes
为什么需要复制指令6MB(!) 对于 1000x1500 像素位图?
如何以更节省内存的方式从非可变位图创建可变位图?
Edit
位图工厂 http://developer.android.com/reference/android/graphics/BitmapFactory.html返回不可变的位图。显然,从不可变位图创建可变位图的唯一方法是将其复制到新的可变位图中。对于 1000x1500 位图,这显然需要12MB(1000x1500x4x2),这会在大多数 Android 设备中导致 OutOfMemoryError。
那么这个问题在Android中是无法解决的吗?
回答你的第一个问题:
1000*1500*32/8=6000000
(颜色信息为 32 位/像素)
要回答你的第二个问题:你需要减小图像的大小,要么通过分块处理,要么降低分辨率或颜色深度。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)