【发布时间】:2013-06-20 15:24:49
【问题描述】:
我目前正在制作一个修改图像的某些字节的 Android 应用程序。为此,我编写了以下代码:
Bitmap bmp = BitmapFactory.decodeStream(new FileInputStream(path));
ByteBuffer buffer = ByteBuffer.allocate(bmp.getWidth()*bmp.getHeight());
bmp.copyPixelsToBuffer(buffer);
return buffer.array();
问题是这种方式使用了太多的堆内存,并抛出OutOfMemoryException。
我知道我可以让应用程序的堆内存更大,但这似乎不是一个好的设计选择。
有没有更节省内存的方式来改变图像的字节数?
【问题讨论】:
-
在这种情况下增加堆实际上可能不是一个糟糕的设计选择。图像编辑器尤其需要比常规应用程序更多的堆内存。事实上,这是推荐使用更大堆大小的一个示例(查看关于内存管理的 Google I/O 讲座——我认为它来自 2011 年)。
-
buffer是ByteBuffer? -
@fge 是的,我会把它添加到帖子中。
-
@Rarw 我将观看 Google I/O 讲座。感谢您的提示!
-
也许您可以使用内存映射文件而不是在堆上分配的缓冲区?
标签: java android bitmap bitmapfactory