在对图像应用过滤器时避免内存异常(Android)

时间:2011-12-20 07:08:47

标签: android image-processing bitmap out-of-memory

我正在尝试在图像上应用一些过滤器。要应用过滤器,我必须首先创建一个数组:

int[] arr = new int[image.width*image.height];// to store each pixel

然后我可以将它传递给将应用过滤器的函数。

问题:如果我的图片大于500kb(周围), OOME 就会向我问好。

我尝试了什么:将整个图片分成四个部分并在每个部分上应用过滤器然后加入它们但是我再次在同一行中获得 OOME ,即创建int数组。

我不想在图像质量上妥协并缩小它。

我真正想要的只是提示/逻辑/架构,它可以处理大于 5 mb 的大图像....

4 个答案:

答案 0 :(得分:3)

尝试使用largeHeap 在manifest.xml中 在申请标签下 添加

android:largeHeap = "true"

答案 1 :(得分:2)

处理真正大图像的最佳方法是使用JNI。

也许renderscript也可以提供帮助,但我不确定它的内存限制。

答案 2 :(得分:1)

处理此问题的一种方法是按照您的建议平铺图像。抓住OOME,并将图块的大小减半,直到数组成功分配。

然后按顺序处理每个图块,每次重新使用该图像。

答案 3 :(得分:-1)

要回答你的问题,我会在两个不同的部分考虑它。

  1. 如何避免内存不足异常......您可以参考此链接。 There is my answer.

  2. 其次,如果您想显示大小为5 MB的图像。您可以尝试使用缓冲区存储。以块为单位逐个下载图像,将它们保存到临时文件并继续清除缓冲区存储。我自己没有实现它。你可以尝试一下。

  3. 感谢: N_JOY