bot*_*bot 3 c java android android-ndk
我最近发现 NDK 代码可以分配的内存量没有硬性限制,而您可以在 Java 端分配的内存量非常有限(在大多数设备上约为 25Mb)。
我想编写一个图像处理应用程序(类似于 Photoshop),它需要一次在内存中保留几个大位图,其中位图数据将占用大约 20Mb 的内存。在 Java 中执行此操作会使应用程序在我尝试过的许多设备上容易出现内存不足异常。
我当前的所有代码都使用 Bitmap 和 Canvas 类来处理我的图像。 任何人都可以建议某种方式,允许我在 C 端分配大部分内存,并且仍然使用 Bitmap+Canvas 来执行我的绘图操作(使用 Android 2.1 及更高版本)?
例如,如果我的图像由 6 个位图图层组成并且用户在第 3 层上绘画,我需要在第 3 层上绘制一个油漆斑点位图,然后更新屏幕以显示将所有图层展平在最上面的结果彼此实时。我已经考虑了将我在 C 中的 6 个位图分配为 int 数组并使用 Canvas 在 Java 端使用存储在 Bitmap 对象中的正在编辑的图层副本执行绘画操作的方法。我不确定扁平化阶段将如何工作。
查看 NDK 中的“位图等离子体”示例。它在 Java 中创建一个位图并在本机代码中操作这些位。一种可能的技术是,您可以分配大内存块并将图像保存在本机代码中,然后简单地将“视图”呈现为 Java 创建的位图。渲染视图和“展平”图像层的方法可能应该在本机代码中完成。类似的东西:
...用户更改了图层...
My_native_render_code(MyDisplayBitmap);
无效();