【问题标题】:Android Bitmap native API to create android.graphics.Bitmap instanceAndroid Bitmap 原生 API 创建 android.graphics.Bitmap 实例
【发布时间】:2011-08-25 01:10:14
【问题描述】:

我正在使用本机代码,并且我有一个像素缓冲区(即 int* 缓冲区)。我想从缓冲区创建一个具有特定宽度、高度的 android.util.Bitmap 实例。

目前,我将缓冲区返回给 Java 并使用 android.graphics.Bitmap.createBitmap() 创建 Bitmap 实例。但它似乎效率不高,它在我的手机中抛出 OutOfMemoryException(资源较少),但在平板电脑上工作(更多资源)。

我的问题是:如何以本机方式创建 Bitmap 实例(即在 C 中创建此类实例并使用 JNI 接口在 Java 中作为 Bitmap 返回)?

【问题讨论】:

  • 对不起,你能写出如何从本机代码传递缓冲区并在java中创建位图吗?

标签: android bitmap java-native-interface


【解决方案1】:

位图有多大?如果它在 Java 中引发 OOM,那么任何从 C 中将其传回的尝试都可能会做同样的事情——它仍然需要消耗 Java 内存。考虑一种每像素占用较少空间的位图格式,例如 RGB_565 或 ARGB_4444。

【讨论】:

  • 我的数据包含大约 3000 x 5000 像素的位图,我尝试了不同的 Bitmap.Config,没有运气。
  • 那是相当大的。你没有画完整,是吗?考虑以某种方式在 C 中将其拆分,然后只将 Java 需要的部分传回给 Java。
  • 确实,我会用缩放/平移功能显示谁的图像。我试图缩小(在本机代码中),它适用于图像质量的降低。有没有办法直接在原生代码中将图像转换为 Bitmap 对象?
  • 理论上可以直接在原生代码中。我不知道怎么做,你可能最终会重复很多系统代码。在本机代码中将图像转换为位图 - 它仍然会使用 JVM 资源,并且会受到相同的基于 Java 的内存限制。此外,您可能希望查看增加 Java 进程的内存配额。这并不是说您正在耗尽系统内存 - 每个 Java 进程都有自己的内存限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-29
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
  • 2013-10-18
  • 2023-03-28
  • 1970-01-01
相关资源
最近更新 更多