位图/画布的使用和NDK

3
我最近发现,相比在Java侧只能分配有限内存(大多数设备上为约25Mb),NDK代码可以分配无限量的内存。我想编写一个图像处理应用程序(类似于Photoshop),需要同时保持几个大型位图在内存中,其中位图数据将占用约20Mb的内存。在Java中进行此操作可能会导致许多设备出现内存不足异常。
所有我当前的代码都使用Bitmap和Canvas类来进行图像操作。有没有人能建议一种方法,允许我在C端分配大部分内存,并仍然使用Bitmap+Canvas执行我的绘图操作(使用Android 2.1及以上版本)?
例如,如果我的图像由6个位图层组成,用户正在第3层上绘画,我需要在第3层上绘制一个画布位图,然后实时更新屏幕以显示所有层的压缩结果。我考虑了一些方案,例如在C中将我的6个位图分配为int数组,并在Java中使用Canvas进行绘画操作,使用存储在Bitmap对象中的正在编辑的图层的副本。但我不确定压缩阶段如何工作。

我从未尝试过,但 SDK 中有一个代码示例展示了如何使用 NDK 进行位图操作,但我认为这仅适用于 Android 2.2。 - Jason Rogers
1个回答

5
请查看 NDK 中的 "bitmap-plasma" 示例。它在 Java 中创建位图并在本地代码中操作位。一种可能的技术是,您可以分配大块内存并将图像保存在本地代码中,然后仅呈现 Java 创建的位图中的 "视图"。渲染视图和对图像层进行 "平整化" 的方法应该在本地代码中完成,例如:

... 用户更改了一个图层...

My_native_render_code(MyDisplayBitmap);

invalidate();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接