【发布时间】:2015-11-06 22:24:29
【问题描述】:
我正在使用 Android jni C++ 用 Java 做一个项目。我在 C++ 中有一个带有以下参数的函数:
C++ 函数:
void rectify (vector <Point2f> & corners, Mat & img) {...}
在 JAVA 中,调用将是:
Mat image = Highgui.imread("img.png");
List <MatOfPoint> cornners = new ArrayList<MatOfPoint>();;
Point b = new Point (real_x2, real_y2);
MatOfPoint ma = new MatOfPoint (b);
cornners.add(ma);
rectfy(image.getNativeObjAddr(), cornners)
public native void rectfy(long mat, "??" matofpoint);
有了这个,我想知道函数C++ jni如何:
JNIEXPORT void JNICALL Java_ImageProcessingActivity_rectfy (JNIEnv * jobject, ?? cornners, inputMatAddress jlong)
【问题讨论】:
-
您是否尝试过在 Java 端创建具有所需接口的 Java 本机方法,并使用
javah创建 C 端标头? -
我在 Eclipse 中使用 NDK。我有一个.java,它有一个本地方法的声明,引用一个.cpp,它加载了
System.loadLibrary ("rectifylib"),“rectifylib” 指向jni-parts.cpp它在文件夹和 jni 里面,它有JNICALL Java_ImageProcessingActivity_rectfy (...)_.的方法 -
你想知道函数what会怎样?问题是什么?您在寻找关键字
void吗? -
我想知道的是如何将
ArrayList <MatOfPoint2f> (vector <Point2f>)java 传递给 C++ jni 中的代码。 C++ 中的函数将接收的参数类型是什么? -
据我了解,在 JNI 中,所有类(非基元)都以
jobject传递。以类似的方式,当您想从 C++ 传回 Java 类时,您返回一个jobject,它已被实例化为例如ArrayList。我认为您可以找到几个比我更好地解释这一点的 JNI 示例/教程。
标签: java android c++ opencv java-native-interface