我正在按比例缩小地图
Bitmap resizedBitmap = Bitmap.createScaledBitmap(BitmapFactory.decodeFile(picturePath), 960, 730, false);
执行此处理我上传了一些图像,但是我收到了类型错误
java.lang.OutOfMemoryError: Failed to allocate a 31961100 byte allocation with 15257484 free bytes and 14MB until OOM
请帮我解决一下怎么办?
答案 0 :(得分:6)
这是您使用BitmapFactory.Options
:
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
options.inSampleSize = 2;
options.inJustDecodeBounds = false;
options.inTempStorage = new byte[16 * 1024];
Bitmap bmp = BitmapFactory.decodeFile(picturePath,options);
Bitmap resizedBitmap = Bitmap.createScaledBitmap(bmp, 960, 730, false);
您还可以通过编写自定义函数来计算位图的inSampleSize
。
此处的Google文档:http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
您可以通过在清单中添加android:largeHeap="true"
来增加分配给您的应用程序的内存。
注意:为您的应用程序增加heap
并不被认为是理想的解决方案。
这是谷歌提取的解释,
但是,请求大堆的功能仅适用于a 一小组应用程序,可以证明需要消耗更多的RAM(例如 作为一个大型照片编辑应用程序)。永远不要简单地请求大堆 因为你已经没有内存而你需要快速修复 - 你应该这样做 只有当你确切知道所有记忆的存在时才使用它 分配以及必须保留的原因。然而,即使你有信心 你的应用程序可以证明大堆的合理性,你应该避免请求它 尽可能的。使用额外的内存将越来越多 因为垃圾而损害整体用户体验 收集将花费更长时间,系统性能可能会更慢 任务切换或执行其他常见操作。
这里是文档https://developer.android.com/training/articles/memory.html
的完整链接