[英]Load a PNG image into Java as BufferedImage through JNI C code
[英]BufferedImage image pointer data as a JNI parameter for C function
我正在开发一个使用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在C和C ++中调用的方式有所不同吗? 它会为JNI带来极大的启发,因为在线教程似乎从未真正提出JNI对于C ++的区别远胜于C的事实……
是啊,就是。
jintArray
或jbyteArray
是您应该使用的结构。
如果我没记错的话,那是BufferedImage
的getRGB(...)
方法,该方法返回一个表示RGB值的整数数组。
因此,将这两部分放在一起,您将一路顺风。
有关方法签名,请参阅此文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.