3

我正在开发一个使用 JNI(C 动态/共享库的桥)的 Java 应用程序。在应用程序的 Java 端,我生成了一系列图像,在 C 代码中,我将它们编码为视频。

我知道我可以将图像保存在某种临时文件中,然后将文件路径传递给 C,但这看起来很笨拙而且很慢。

我可以获取 BufferedImage RGB24 数组数据并将其传递给 C 吗?

我是 Java 和 JNI 的新手。

4

2 回答 2

4

将 byte[] 从 Java 转移到 C 是完全可能的。

它实际上很简单,但你真的需要注意你的方法签名。寻找示例代码..

  JNIEXPORT jbyteArray passToC(JNIEnv* env, jobject obj, jbyteArray array)
  {
      int length = (*env)->GetArrayLength(env, array);
      byte data[256];
      (*env)->GetByteArrayRegion(env, array, 0, 256, data);
      //data should hold your bytes now.
  }

这里也是一个有用的链接http://docs.oracle.com/javase/1.4.2/docs/guide/jni/spec/functions.html

编辑:但就像我说的那样,对方法名称要非常小心,因为它需要在其中的某个地方有一个包/类......

也看看这个,JNI Calls 在 C 和 C++ 中不同吗? 它将极大地阐明 JNI,因为在线教程似乎从未真正提出JNI 对于 C++ 与 C 不同的事实足够清楚......

于 2012-07-27T17:25:13.000 回答
1

是啊,就是。

jintArray或者jbyteArray是您应该使用的结构。

如果我没记错的话,有getRGB(...)一种方法BufferedImage可以返回一个表示 RGB 值的整数数组。

所以,把这两个放在一起,你就会上路。

有关方法签名等,请参阅本文档。

于 2012-07-27T17:29:10.823 回答