导航:首页 > 操作系统 > 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传递数组相关的资料

热点内容
加密芯片的计算方法 浏览:187
手机存储为什么找不到微信文件夹 浏览:695
msf端口迁移命令 浏览:880
工商app积分怎么查询 浏览:143
铁路app怎么买火车票 浏览:309
移魅族除的app怎么添加 浏览:240
兔笼子大号加密 浏览:171
单片机程序烧录操作成功 浏览:878
指标高抛低吸点位源码 浏览:205
25匹压缩机铜管 浏览:570
单片机单灯左移05 浏览:150
买服务器练手什么配置 浏览:783
服务器被毁该怎么办 浏览:939
python私有库 浏览:514
Python有中文吗 浏览:736
麦块的服务器为什么都进不去 浏览:474
新买的服务器如何打开 浏览:35
安卓软件游戏怎么开发 浏览:319
用扑克摆爱心解压神器怎么摆 浏览:70
松下制冷压缩机 浏览:275