我正在编写一个图像处理应用程序(例如,操作包括模糊、旋转、缩放、合并、洪水填充),我担心内存使用。
我遇到的问题是我需要使用位图+ Canvas ,以便我可以利用现有功能来操作图像,并且我还需要将图像的副本放入 int 数组中以将像素修改为对于模糊和洪水填充等某些操作,使用 set/getPixel 函数修改位图太慢。
我当前的内存使用情况是:
- 图像本身的 Bitmap 对象。
- 一个离屏 Bitmap 对象,用于使用 Canvas 执行图像操作任务。
- 用于 mask 的纯 Alpha 位图。
- 两个 int 数组,每个数组都有足够的像素来包含主图像的副本。
例如,我使用两个 int 数组来执行洪水填充操作:我将主图像复制到一个数组,将主图像的灰度版本放入另一个数组中(其中灰度表示是使用离屏创建的)首先是Bitamp和Canvas),在进行颜色比较时使用灰度图像在第一个数组中执行洪水填充操作,然后将最终图像复制回主图像Bitmap。我也许可以消除此操作的屏幕外位图,但是例如我使用离屏位图来执行绘画操作。
有什么技巧可以用来减少内存使用吗?例如,是否有任何快速方法可以修改像素而不涉及制作 Bitmap 对象的 int 数组副本?我可以使用Canvas对象直接修改int数组吗?
我想添加图层功能(即主图像将由多个位图组成),但我的内存已经不足。
最佳答案
根据您使用两个 int 数组的用途,您可以考虑将它们设为字节数组。同样,根据您的用途,您可以使用二进制掩码在每个字节中存储多个位标志。而且,根据您希望边界检测的工作方式,您可以减少用于洪水填充操作的图像上的每像素位数。 HTH
关于java - 图像处理应用程序的内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4725390/