日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

安卓JNI使用C++类

發布時間:2023/12/31 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 安卓JNI使用C++类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?????? 安卓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++类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。