我正在开发一个使用JNI(桥接到C动态/共享库)的Java应用程序。在应用程序的Java端,我正在生成一系列图像,在C代码中,我将它们编码为视频。
我知道我可以将图像保存在某种临时文件中并将文件路径传递给C,但这似乎是hackish和slow。
我是否可以获取BufferedImage RGB24阵列数据并将其传递给C?
我是Java和JNI的新手。
答案 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)
是的,是的。
jintArray
或jbyteArray
是您应该使用的结构。
如果我没记错的话,getRGB(...)
的{{1}}方法会返回一个表示RGB值的整数数组。
所以,把这两个放在一起,你就可以了。
有关方法签名等,请参阅this文档。