【问题标题】:Memory usage for image manipulation app图像处理应用程序的内存使用情况
【发布时间】: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


【解决方案1】:

根据您使用两个 int 数组的目的,您可以考虑将它们设为字节数组。同样,根据您的用途,您可以使用二进制掩码在每个字节中存储多个位标志。而且,根据您希望边界检测的工作方式,您可以减少用于填充操作的图像上每像素的位数。 高温

【讨论】:

    猜你喜欢
    • 2017-05-08
    • 1970-01-01
    • 2011-03-09
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    相关资源
    最近更新 更多