2012-05-08 2 views
0

현재 안드로이드 응용 프로그램에서 작업 중입니다. 자바 측에서는 List<KeyPoint> objectKeypoints을 원시 코드로 전달합니다. 그러나이 처리 작업을 네이티브 측에서 Vector<Keypoint> objectKeypoints으로 어떻게 변환 할 수 있습니까?"List <KeyPoint> objectKeypoints"jobject를 <Keypoint> 네이티브 코드로 전달

Exaample : 자바 사이드 내 호출 방법 :

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 측에서 첫 번째 라인을 변경할 수 있습니다 : "List objKeypoints;" "Vector objKeypoints;" 일반적으로 벡터 방향으로 jobject를 캐스팅하는 방법을 모른다. UniQ

+0

@Uniq 인터페이스를 변경할 수 있다면 캐스팅을 전혀 할 필요가 없다. 실제로 JNI에는 캐스트와 같은 것이 없습니다. 선언 된 클래스에서 호출하려는 메서드를 찾아 호출합니다. 객체가 해당 클래스가 아닌 경우 예외가 발생합니다. – EJP

관련 문제