【发布时间】:2011-01-26 04:10:42
【问题描述】:
我最近发现 NDK 代码可以分配的内存量没有硬性限制,而您可以在 Java 端分配的内存量非常有限(在大多数设备上约为 25Mb)。
我想编写一个图像处理应用程序(类似于 Photoshop),它需要同时在内存中保存多个大位图,而位图数据将占用大约 20Mb 的内存。在 Java 中执行此操作会使应用程序在我尝试过的许多设备上容易出现内存不足异常。
我当前的所有代码都使用 Bitmap 和 Canvas 类来进行图像处理。 谁能建议一些方法让我在 C 端分配大部分内存并仍然使用 Bitmap+Canvas 来执行我的绘图操作(使用 Android 2.1 及更高版本)?
例如,如果我的图像由 6 个位图图层组成,并且用户在第 3 层进行绘画,我需要在第 3 层绘制一个绘画斑点位图,然后更新屏幕以显示全部展平的结果实时叠加。我考虑过将 C 中的 6 个位图分配为 int 数组,并使用存储在 Bitmap 对象中的正在编辑的图层副本在 Java 端使用 Canvas 执行绘画操作。不过,我不确定扁平化阶段将如何工作。
【问题讨论】:
-
我从未尝试过,但 sdk 中有一个代码示例显示了使用 ndk 进行位图操作,但我认为这仅适用于 andorid 2.2
标签: java android c android-ndk