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

标签 java c pointers java-native-interface bufferedimage

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

我知道我可以将图像保存在某种临时文件中并将文件路径传递到 C 中,但这看起来很老套而且很慢。

我是否可以获取 BufferedImage RGB24 数组数据并将其传递到 C 中?

我对 Java 和 JNI 还很陌生。

最佳答案

将 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++ 而言不同于 C 足够清楚...

关于java - BufferedImage 图像指针数据作为 C 函数的 JNI 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11692598/

相关文章:

c++ - 将值存储在 char 指针指向的 char 数组中

c 双指针给出没有意义的错误

c - C编程:如何检查输入字符串是否包含大写和小写字母的组合

java - 为什么在 Java 中 char 到 int 的转换有效而不是 char 到 Integer

java - 绝对键盘输入位置(闪烁光标)

java - eclipse 外部工具配置 -> 类路径中引用的库不存在 : org. eclipse.swt

c - 用C制作我自己的 turtle 图形,无法更改数组中元素的值

c - 是否有任何快速算法来计算所有 2 的幂的数字的 log2?

c - 通过从二进制文件中加载结构数据并加载到 C 中的 gtk 列表存储中,出现内存问题

java - Java 中的截断或 DecimalFormat