Android高分辨率图像处理

时间:2011-12-28 17:19:55

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

从实验和阅读其他帖子like this one来看,似乎很难在Android上处理高分辨率图像,因为虚拟机允许分配的内存数量有限制。

加载800万像素的摄像头图像需要大约20 MB的内存。

据我所知,简单的解决方案是在加载图像时对图像进行下采样(BitmapFactory提供这样的选项)但我仍然希望以全分辨率处理图像:相机拍摄8MP,为什么我只使用4MP并减少质量。

有谁知道这方面有很好的解决方法吗?

3 个答案:

答案 0 :(得分:2)

在资源有限的环境中,我认为你唯一的解决办法是分而治之:缓存/平铺(如:tiles)

不是一次性加载和处理图像,而是从原始数据文件加载/保存图像的可管理块以进行处理。这不是微不足道的,可能会变得非常复杂,具体取决于您想要处理的处理类型,但如果您不想构成图像质量,这是唯一的方法。

答案 1 :(得分:2)

确实,这很难。但是,如果图像是某种连续的栅格格式,您可以对其进行mmap (请参阅java.nio.ByteBuffer) - 这样您就可以获得字节缓冲区而无需分配它。

答案 2 :(得分:1)

2件事:

  1. 查看Honeycomb的画廊。它执行基于平铺的渲染。您可以放大图像,然后您会看到当前部分比其他部分更高。如果你平移,你会看到它渲染。

  2. 使用本机代码(NDK)时,没有资源限制。所以你可以尝试加载所有原生数据,并以某种方式使用JNI获取它的一部分,但我怀疑它比蜂窝画廊更好。