2012-05-08 9 views
0

の "List objectKeypoints" jobjectを渡します。現在アンドロイドアプリケーションで作業しています。 Java側では List<KeyPoint> objectKeypointsをネイティブコードに渡します。しかし、どのようにすれば、ネイティブ側のこのジョブを Vector<Keypoint> objectKeypointsに変換して後で処理することができますか? ネイティブコード<Keypoint>ネイティブコード

Exaample: Javaのサイド私の呼び出し方法:

List<KeyPoint> objKeypoints; 
Mat mGrayMat = ;// is not empty; 
FeatureDetector featureDetector = FeatureDetector.create(FeatureDetector.SURF); 
featureDetector.detect(obj_keypoints, mGrayMat); 

FindObject(objKeypoints,mGrayMat); 

ネイティブ側C++のコード。

JNIEXPORT void JNICALL Java_my_app_AndroidAppView_FindObject(JNIEnv* env, jobject obj, jobject obj_keypoints, jlong matAddrObjGray){ 
// How to convert obj_keypoints to Vector<KeyPoint>? 
Vector<KeyPoint> objectKeypoints = ....; 
Next Step is calculating the descriptors for the Keypoints. 
} 

答えて

0

本当にベクターでない限り、できません。インターフェイスがListを指定している場合は、それをListとして処理する必要があります。 Vectorが必要な場合は、インタフェースをVectorに変更します。

リストから新しいベクターを作成することもできますが、それは無意味なほど高価なようです。

+0

お返事ありがとうございます。 Java側では、私は最初の行を変更することができます: "リスト objKeypoints;" 「ベクトル objKeypoints;」に一般的に、ネイティブ側のjobjectをVectorにキャストする方法はわかりません。 UniQ

+0

@ Unniインターフェイスを変更できる場合は、キャストする必要はありません。実際、JNIにはキャストのようなものはありません。宣言されているクラスから呼び出したいメソッドを検索して呼び出すだけです。オブジェクトがそのクラスでない場合、例外が発生します。 – EJP

関連する問題