我有一个1000×1500像素位图,我想在Android中制作一个可变副本.
当我运行以下代码时……
// int wIDth = original.getWIDth(); // 1000px// int height = original.getHeight(); // 1500pxfinal Bitmap result = original.copy(original.getConfig(), true);original.recycle();
…我在副本行上得到一个OutOfMemoryError:
java.lang.OutOfMemoryError: bitmap size exceeds VM budgetERROR/GraphicsJNI(419): VM won't let us allocate 6000000 bytes
为什么复制指令需要6MB(!)才能生成1000×1500像素的位图?
如何以更高内存效率的方式从非可变位图创建可变位图?
编辑
BitmapFactory返回不可变位图.显然,从不可变位图创建可变位图的唯一方法是将其复制到新的可变位图中.在1000×1500位图的情况下,这显然需要12MB(1000x1500x4x2),这在大多数AndroID设备中导致OutOfMemoryError.
这个问题在AndroID中无法解决吗?
解决方法:
回答你的第一个问题:
1000 * 1500 * 32/8 = 600万
(32位/像素的颜色信息)
要回答第二个问题:您需要通过以块为单位处理图像来减小图像的大小,或者降低分辨率或颜色深度.
总结以上是内存溢出为你收集整理的android – 为什么这么多内存?全部内容,希望文章能够帮你解决android – 为什么这么多内存?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)