我正在开发一个使用 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/