有没有一种方法可以在JNI中分配位图并在Java中使用它来避免OOM错误



我有一个绘图板应用程序;导出图像";作用我希望导出的图像大小可以和用户想要的一样大。导出步骤为:

  1. 创建位图
  2. 应用一些变换矩阵
  3. 在位图上创建一个画布,并在上面绘制一些内容
  4. 压缩位图并保存到文件

使用JavaBitmap.createBitmap时,如果创建的位图太大,并且所需内存达到Android VM堆大小限制,则会遇到OutOfMemoryError

为了避免OOM错误,我正在考虑在JNI中使用本地分配的像素数据创建一个位图,并在Java中使用该位图作为参考。但到目前为止,即使我搜索了很多,我也不知道如何实现这一点。

或者,如果我不能做到这一点,有没有其他方法可以在没有OOM错误的情况下将画布绘制到可能非常的大位图上?

谢谢你的帮助!

如果最终结果是一个文件,则根本不需要使用位图。使用C或C++映像库并以本机方式执行所有操作。它也会更快(事实上,Android已经用C解码位图了,在Java中太慢了,指针让它更容易(。

位图到底有多大?请记住,bmp需要内存中的4*width*height字节。即使在基于C的内存中,你也可以创建一个多大的内存。

最新更新