導航:首頁 > 操作系統 > androidjni傳遞數組

androidjni傳遞數組

發布時間:2023-01-14 13:28:55

A. Android JNI部分得到jbytearray,java用byte[]數組進行接收。該如何實現

利用
jni
的回調機制
java層定義
native方法
private
void
aa(string
c)
{
output(c);
};
JNI層添加native數組
static
JNINativeMethod
array
=
{
{
「aa",
"(JString)V",
(void*)JNI_aa,
},
};
jni層調用注冊的方法
jclass
cls
=
(*env)->GetObjectClass(env,
log);
jmethodID
jmid
=
(*env)->GetMethodID(env,
cls,
"aa",
"(Ljava/lang/String;)V");
jstring
info
=
(*env)->NewStringUTF(env,
"out!");
(*env)->CallVoidMethod(env,log,
jmid,info);
//調用方法
//釋放string
(*env)->ReleaseStringUTFChars(env,info,(*env)->GetStringUTFChars(env,
info,
FALSE));

B. Opencv4Android NDK,JNI調用C++函數,對象類型參數轉換問題

Mat傳地址過去
java中:
Mat src = new Mat();
Utils.bitmapToMat(bmp, src);
long addrMat = src.getNativeObjAddr();
在C++中:
Mat& finger_src = *(Mat *)addrMat;

至於Point2f 數組可拆為X坐標和Y坐標數組
Point2f mask[15], float width[15]直接傳 jfloatArray width, jfloatArray maskX, jfloatArray maskY
獲取
jfloat *arr, *mx, *my;
arr = env->GetFloatArrayElements(width,JNI_FALSE);
mx = env->GetFloatArrayElements(maskX,JNI_FALSE);
my = env->GetFloatArrayElements(maskY,JNI_FALSE);
/******** 轉為C++類型 進行處理 **********/
Point2f mask[16]; //坐標
float fingerWidth[15]; //寬度
for(int i=0;i<15;i++){
mask[i].x = mx[i];
mask[i].y = my[i];
fingerWidth[i] = arr[i];
}

/************************** 結果返回java ************************************/
for(int i=0;i<15;i++){
mx[i] = mask[i].x;
my[i] = mask[i].y;
arr[i] = fingerWidth[i];
}

閱讀全文

與androidjni傳遞數組相關的資料

熱點內容
騰訊微雲解壓用vip嗎 瀏覽:254
伺服器啟動如何選擇默認啟動項 瀏覽:152
河南省伺服器託管商雲主機物理機 瀏覽:795
人教版初中數學全套pdf 瀏覽:666
華為怎麼獲取定位伺服器地址 瀏覽:607
在什麼app上可以製作動漫 瀏覽:38
伺服器11是什麼 瀏覽:424
android源碼架構解析 瀏覽:178
date編譯 瀏覽:871
lru頁面調整演算法是指 瀏覽:477
樑柱節點箍筋加密區范圍分成三段 瀏覽:373
命令寫入鏡像 瀏覽:241
linux伺服器獲取不到mac地址 瀏覽:559
linux網卡名稱修改 瀏覽:665
敲罐子解壓聲音 瀏覽:955
深圳市加密圖紙 瀏覽:631
nbspjava 瀏覽:138
linuxopen返回值 瀏覽:607
伺服器意外斷電出現報錯怎麼辦 瀏覽:689
手機如何當web伺服器 瀏覽:135