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の呼び出しはCとC++で異なりますか? オンラインのチュートリアルでは、JNIがCとはC ++とは異なるという事実が十分に明確に示されているようには見えないため、JNIに大きな光を当てることができます...
そうですよ。
jintArray
またはjbyteArray
、使用する必要のある構造です。
そして、私が正しく覚えていれば、RGB値を表すintの配列を返すgetRGB(...)
メソッドがあります。BufferedImage
だから、それらの2つを一緒にすると、あなたはあなたの道にいるでしょう。
メソッドシグネチャなどについては、このドキュメントを参照してください。