位图/canvas使用和NDK

我最近发现NDK代码可以分配的内存量没有硬限制,相比之下,您可以在Java端分配大量有限的内存(大多数设备上大约25Mb)。

我想编写一个图像处理应用程序(类似于Photoshop),需要在内存中同时保留几个大位图,其中位图数据将占用大约20Mb的内存。 在Java中执行此操作会使应用程序在我尝试过的许多设备上容易出现内存不足exception。

我当前的所有代码都使用Bitmap和Canvas类来进行图像处理。 任何人都可以提出一些方法,允许我在C端分配大部分内存,并仍然使用Bitmap + Canvas来执行我的绘图操作(使用Android 2.1及更高版本)?

例如,如果我的图像由6个位图图层组成,并且用户正在第3层上绘画,我需要将绘制blob位图绘制到第3层,然后更新屏幕以显示在顶部展平所有图层的结果彼此实时的。 我已经考虑过将C中的6位图分配为int数组并使用Canvas使用存储在Bitmap对象中的正在编辑的图层的副本在Java端执行绘制操作。 我不确定扁平化阶段是如何起作用的。

查看NDK中的“bitmap-plasma”样本。 它在Java中创建一个位图并操纵本机代码中的位。 一种可能的技术是,您可以分配大块内存并将图像保存在本机代码中,并简单地将“视图”呈现为Java创建的位图。 渲染视图和对图像图层进行“展平”的方法应该可以在本机代码中完成。 有点像:

…用户更改了一个图层…

My_native_render_code(MyDisplayBitmap);

无效();