1

我在运行时尝试模糊图像时遇到了一些问题。我已经在这里发布了一个问题,但它被否决了,我不知道为什么,因为据我所知,我没有反对这个问题的常见问题解答。

如果可能的话,我正在尝试能够模糊图像,即使在旧设备上也是如此,但正如我现在拥有的那样,它会因 OutOfMemoryException 而崩溃。然而,我学到的是,使用fastblur我引用的方法,我不能使用除 之外的任何东西int[],因为位图方法需要int[]. 因此,我对自己问题的最佳猜测是使用NDKC 方法进行模糊。但是,这并不能完全解决我的记忆问题。

我想我可以做一些事情,例如检查可用内存与它会花费我多少内存和/或监听并onLowMemory()Activity出现模糊过程时打破模糊过程。

但是,对于第一个想法,我对计算内存和使用情况知之甚少。鉴于这里的帖子,看起来我可以计算出我可以安全使用多少内存,因为:

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/int[]内存使用情况,使用一个常量值来检查(可用/估计> aConstantValue)。

如果我走得很远,请教我该怎么做。否则,纠正我所说的错误也非常有帮助。我不希望形成一个自以为是的辩论或模棱两可的问题,因为这会违反常见问题解答。如果可能的话,我想建立一个正确的解决方案来处理模糊和内存消耗。

此外,如果您的手指渴望点击对我的问题投反对票,我将不胜感激一些严厉的话,最好是评论形式,让我意识到为什么我应该得到它。

谢谢!

4

0 回答 0