BufferedImage图像指针数据作为C函数的JNI参数

时间:2012-07-27 17:20:15

标签: java c pointers java-native-interface bufferedimage

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

我知道我可以将图像保存在某种临时文件中并将文件路径传递给C,但这似乎是hackish和slow。

我是否可以获取BufferedImage RGB24阵列数据并将其传递给C?

我是Java和JNI的新手。

2 个答案:

答案 0 :(得分:3)

完全有可能将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 different in C vs C++?  它将对JNI有所启发,因为在线教程似乎从未真正提出这样一个事实: JNI与C ++不同,而足够明显......

答案 1 :(得分:1)

是的,是的。

jintArrayjbyteArray是您应该使用的结构。

如果我没记错的话,getRGB(...)的{​​{1}}方法会返回一个表示RGB值的整数数组。

所以,把这两个放在一起,你就可以了。

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