【发布时间】:2011-01-18 14:44:18
【问题描述】:
我正在编写一个图像处理应用程序(例如,操作包括模糊、旋转、缩放、合并、填充),我担心内存使用。
我遇到的问题是我需要使用 Bitmap+Canvas 以便我可以利用现有功能来操作图像,并且我还需要将图像的副本放在 int 数组中以将像素修改为使用 set/getPixel 函数修改位图对于模糊和填充等一些操作来说太慢了。
我目前的内存使用情况是:
- 图像本身的位图对象。
- 我使用 Canvas 执行图像处理任务的屏幕外位图对象。
- 用于遮罩的仅 alpha 位图。
- 两个 int 数组,每个数组都有足够的像素来包含主图像的副本。
例如,我使用两个 int 数组来执行泛洪填充操作:我将主图像复制到一个数组中,将主图像的灰度版本放在另一个数组中(其中灰度表示是使用离屏创建的Bitamp 和 Canvas 首先),在进行颜色比较时使用灰度图像在第一个数组中执行泛洪填充操作,然后将最终图像复制回主图像 Bitmap。我也许可以消除此操作的屏幕外位图,但例如我使用离屏位图来执行绘画操作。
我可以使用什么技巧来减少内存使用量?例如,是否有任何快速的方法来修改不涉及制作 Bitmap 对象的 int 数组副本的像素?可以使用 Canvas 对象直接修改 int 数组吗?
我想添加图层功能(即主图像将由多个位图组成)但我的内存已经不够用了。
【问题讨论】:
-
您可以通过使用矩阵和颜色矩阵/颜色过滤器来执行部分(全部?)这些操作。不过,我认为这是一个相当高级的主题,因此请准备好花几天/几周的时间来学习如何很好地使用它。
-
你能给我更多的建议吗?我已经知道颜色矩阵,但我不知道这些在这里有什么帮助。
标签: java android image-processing mobile