我正在开发一个使用 JNI(C 动态/共享库的桥)的 Java 应用程序。在应用程序的 Java 端,我生成了一系列图像,在 C 代码中,我将它们编码为视频。
我知道我可以将图像保存在某种临时文件中,然后将文件路径传递给 C,但这看起来很笨拙而且很慢。
我可以获取 BufferedImage RGB24 数组数据并将其传递给 C 吗?
我是 Java 和 JNI 的新手。
我正在开发一个使用 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 在 C 和 C++ 中不同吗? 它将极大地阐明 JNI,因为在线教程似乎从未真正提出JNI 对于 C++ 与 C 不同的事实足够清楚......
是啊,就是。
jintArray
或者jbyteArray
是您应该使用的结构。
如果我没记错的话,有getRGB(...)
一种方法BufferedImage
可以返回一个表示 RGB 值的整数数组。
所以,把这两个放在一起,你就会上路。
有关方法签名等,请参阅本文档。