我在尝试在运行时模糊图像时遇到了一些问题。我已经在这个here上发布了一个问题,但它被低估了,我不知道为什么,因为我并没有根据我的知识反对常见问题解答。
我试图能够模糊图像,即使在较旧的设备上,如果可能的话,但是正如我现在所说的那样,它会因OutOfMemoryException而崩溃。然而,我所学到的是,使用我引用的fastblur
方法,除了int[]
之外,我不能使用任何其他内容,因为Bitmap方法需要int[]
。所以,我对自己问题的最佳猜测是使用NDK
和C method进行模糊处理。但是,这并不能完全解决我的记忆问题。
我认为我可以做一些事情,例如检查可用内存与我花费多少内存和/或在onLowMemory()
中监听Activity
并打破模糊过程时点击。
然而,对于第一个想法,我对计算内存和使用情况知之甚少。鉴于帖子here,看起来好像我可以计算出我可以安全使用多少内存,具体如下:
MemoryInfo mi = new MemoryInfo();
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
activityManager.getMemoryInfo(mi);
long availableBytes = mi.availMem;
我可以根据int数组的大小来检查它,假设它是a 32-bit signed two's complement integer
(宽*高* 32L)?另外,我如何给它一个合理的缓冲区来不影响系统性能呢?
我对自己的最佳答案是使用NDK
和C进行模糊,听取onLowMemory()
并预先计算可用内存到我估计的Bitmap
/ {{1内存使用情况使用常量值进行检查(available / estimate> aConstantValue)。
如果我离开了,请教我如何做到这一点。否则,纠正我所说的错误,也是非常有帮助的。我不打算形成一个自以为是的辩论或模棱两可的问题,因为这会违反常见问题。如果可能的话,我想构建一个正确的解决方案来处理模糊和内存消耗。
另外,如果你的手指痒痒地点击我的问题,我会非常感谢一些严厉的话,最好是评论形式,让我明白为什么我应该得到它。
谢谢!