安卓JNI使用C++类,同时可使用C++的类成员变量,这就必须保证程序持续保存Native状态,即长期维护C++对象的地址。完成初始化之后,需要使用对象成员的java层函数需要传入对象的地址。

一、Native类-对象的初始化

1. 一个Java类的数据成员

    private FeelJulyGpsMap  mNativeDetector;//分类器声明!用于标识使用C++对象地址
//摄像机参数:用于缩放!
CamParam mCamParam =null;
//JNI2.用于识别的JNI代码!
private long mNativeObj = 0;
//用于追踪测试!
public long mNativeObjCvT = 0;

2. 使用的Native库

	//JNI1.使用JNI的C++库
static {
System.loadLibrary("feelJulyGpsMap");
}

3.使用的JNI函数:

	//2.JNI函数!
//四、追踪函数-OpenCV!wishchin!!!
private static native long trackInitJni(String cascadeName);

4.Java初始化函数

	//1.主要处理函数!
public int trackInit()
{
mCamParam = new CamParam();//初始化摄像机参数!wishchin!!!
String cascadeName ="";
mNativeObjCvT = trackInitJni(cascadeName);//长期维持mNativeObjCvT 值,作为对象的地址 return 1;
}

5.java使用的函数

       mTrack6Dof = new CTrack6Dof();
if(null!= mTrack6Dof){
mTrack6Dof.trackInit();//初始化参数!参数对象全局变量已封装!
}

上述过程完成native对象的初始化,java层长期保持 mNativeObjCvT 的值作为JNI层的传入地址。

二、Native类-对象成员的使用

1. 在java层,可以传入地址使用C++层的对象的数据和函数

    @SuppressLint("SdCardPath")
public Mat onCameraFrame(CvCameraViewFrame inputFrame) { mRgba = inputFrame.rgba();
mGray = inputFrame.gray(); //0.检测面部的原始代码!//Detect 面部的代码,使用C++!wishchin!
//detectFace( mGray, mRgba); //JNI//wishchin !
if (mTrack6Dof.mNativeObjCvT != 0 && mTrack6Dof.mCamParam!=null){
//1.测试追踪!
                 mTrack6Dof.trackOneFrame( M );//trackInit(); }

2. 所使用的JNI接口函数的函数

//主要处理函数,追踪一帧图像!
@SuppressLint("SdCardPath")
public int trackOneFrame( Mat frame )
{
Mat frameRf= frame.clone();
Mat rvec = new Mat();rvec =Mat.zeros(3,1,CvType.CV_64FC1);
Mat tvec = new Mat();tvec =Mat.zeros(3,1,CvType.CV_64FC1); jniTrackProject(
mNativeObjCvT,
frame.getNativeObjAddr(),
mCamParam.intrinsic_Mat.getNativeObjAddr(),
mCamParam.disCoeff.getNativeObjAddr(),
mCamParam.object_pointsM.getNativeObjAddr()
,(mCamParam.axisM).getNativeObjAddr()
,frameRf.getNativeObjAddr()
,rvec.getNativeObjAddr()
,tvec.getNativeObjAddr()
);
}

所使用的 mNativeObjCvT, 值为对象的C++层地址。

3. trackProject()的函数原型:

	//取代trackJniRf的输出,多输出几个参数!
//把画图的投影点带出JNI层!
private static native int jniTrackProject(
long thiz,
long frame
,long intrinsic_Mat, long disCoeff, long object_pointsM , long axisM
,long frameRf
,long rvec,long tvec //The next Input! The Draw OutPut!
);

使用 long thiz, 这个参数代表对象的地址参数输入....

上述过程完成对本地C++对象的数据成员进行更新,并取成员值,完成第本地对象的使用。

安卓JNI使用C++类的更多相关文章

  1. 安卓JNI精细化讲解,让你彻底了解JNI(一):环境搭建与HelloWord

    目录 1.基础概念 ├──1.1.JNI ├──1.2.NDK ├──1.3.CMake与ndk-build 2.环境搭建 3.Native C++ 项目(HelloWord案例) ├── 3.1.项 ...

  2. 安卓JNI精细化讲解,让你彻底了解JNI(二):用法解析

    目录 用法解析 ├── 1.JNI函数 │ ├── 1.1.extern "C" │ ├── 1.2.JNIEXPORT.JNICALL │ ├── 1.3.函数名 │ ├── 1 ...

  3. 安卓---JNI使用

    交叉编译 系统平台:Windows.Mac OS.Linux CPU平台:ARM.X86.MIPS 概念:在一个平台下打包编译出还有一个平台能够运行的程序#交叉编译原理 源代码->预编译-> ...

  4. 安卓JNI使用OpenCV

    OpenCV也有Java数据结构的包,不过计算速度还是很慢,非不得已不使用此种方式调用OpenCV.使用NDK编写底层OpenCv的调用代码,使用JNI对代码进行封装,可以稍微提高一点效率. 参考链接 ...

  5. 针对安卓java入门:类和对象

    定义类 class Dog { String name; int age; void jump(){ } } 生成对象: public class Test { public static void ...

  6. 安卓开发之HttpURLConnection类和Handler类的使用

    package com.lidaochen.test; import java.io.ByteArrayOutputStream; import java.io.InputStream; public ...

  7. 解决安卓JNI native 线程不能正常退出问题二

    直面这个解决方法的可以看我转载的博客            https://www.cnblogs.com/Carlsblog/p/9438016.html 本方法是个投机取巧法,不过也解决了不能正常 ...

  8. 在安卓JNI/NDK中使用C++11

    在VS下编写的程序移植到Eclipse下,出现了问题: this file requires compiler and library support for iso C++ 2011 standar ...

  9. Java Native Interfce三在JNI中使用Java类的普通方法与变量

    本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 前面我们学习了如何在JNI中通过参数来使用J ...

随机推荐

  1. 【codeforces 510C】Fox And Names

    [题目链接]:http://codeforces.com/contest/510/problem/C [题意] 给你n个字符串; 问你要怎么修改字典序; (即原本是a,b,c..z现在你可以修改每个字 ...

  2. 09springMVC对ajax的支持

    u  最直接的Ajax处理 u  数据绑定@RequestBody/@ResponseBody u  使用@RequestBody/@ResponseBody来支持Ajax u  使用HttpEnti ...

  3. HTML5:控件自动获得焦点

    在HTML5中,页面打开后,需要指定的控件自动获得焦点很简单,只需要一个属性就可以实现 -  autofocus. 示例如下: <input type="text" auto ...

  4. cocos2d js ClippingNode 制作标题闪亮特效

    1.效果图: 之前在<Android 高仿 IOS7 IPhone 解锁 Slide To Unlock>中制作了文字上闪亮移动的效果,这次我们来看下怎样在cocos2d js 中做出类似 ...

  5. 天了噜,我国4G用户超过2亿了!

    近期,看到工信部一组统计数据,小编整个人都不好了,数据显示,2015年5月我国4G用户净增2281.6万,总数超过2亿户. 没错,卡是换成了4G卡,还是那句话,然并卵,用的还是3G手机.开的还是2G网 ...

  6. oracle Plsql 运行update或者delete时卡死问题解决的方法

    oracle Plsql 运行update或者delete时 遇到过Plsql卡死问题或者导致代码运行sql的时候就卡死. 在开发中遇到此问题的时候,本来把sql复制出来,在plsql中运行,Sql本 ...

  7. Oracle 静态监听注冊具体解释

    Oracle 静态监听注冊具体解释 网上有非常多关于oracle 监听静态注冊的文章.但大多都是简单说说,并没有具体的样例.这里,将结合linux as4 下的oracle 10gR2.0.1 举一个 ...

  8. Android实战简易教程-第四十一枪(显示倒计时的Button-适用于获取验证码)

    近期在做获取验证码的功能.考虑到优良的用户体验,决定制作一个拥有倒计时提示的Button按钮,在网上查了一些资料,非常是简单的就能实现.我写了一个小Demo,大家能够应用到自己的项目中. 一.代码 1 ...

  9. WebView 用法总结

    1.AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出 Web page not available 错误. ...

  10. 牛逼的postman,分类管理更好用