Jni :三维数组处理方法 ,以整形三维数组为例 C++实现
本文原创,转载请注明地址:http://www.cnblogs.com/baokang/p/4982846.html
关于Jni的基本使用方法,请参阅:Java 调用 C++ (Java 调用 dll)康哥手把手教你
关于Jni的调试,请参阅:Jni 调试 : eclipse + Vs 联合调试
不废话了,直接上代码
1.java native 接口
/**
* 将三维数组src中的每一个元素平方,dst进行输出
* @param src 输入
* @param dst 输出
*/
public native static void calThreeDimensional(int[][][] src,int[][][] dst);
2.Jni 接口实现
/*
* Class: com_bk_jnidemo_JniDemo
* Method: calThreeDimensional
* Signature: ([[[I[[[I)V
*/
JNIEXPORT void JNICALL Java_com_bk_jnidemo_JniDemo_calThreeDimensional(JNIEnv *env, jclass cls, jobjectArray src, jobjectArray dst)
{
int x,y,z;
jobjectArray src_xy,dst_xy;
jintArray src_x,dst_x;
jint temp;
jint *xSrcValues;
jint *xDstValues; /*------------------------获取x,y,z三个维度数-----------------------*/
src_xy=static_cast<jobjectArray>(env->GetObjectArrayElement(src,0));
dst_xy=static_cast<jobjectArray>(env->GetObjectArrayElement(dst,0)); src_x=static_cast<jintArray>(env->GetObjectArrayElement(src_xy,0));
dst_x=static_cast<jintArray>(env->GetObjectArrayElement(dst_xy,0)); z=env->GetArrayLength(src);
y=env->GetArrayLength(src_xy);
x=env->GetArrayLength(src_x); /*------------------------三层循环处理-----------------------------*/
for(int i=0;i<z;i++)
{
src_xy=static_cast<jobjectArray>(env->GetObjectArrayElement(src,i));
dst_xy=static_cast<jobjectArray>(env->GetObjectArrayElement(dst,i)); for(int j=0;j<y;j++)
{
src_x=static_cast<jintArray>(env->GetObjectArrayElement(src_xy,j));
dst_x=static_cast<jintArray>(env->GetObjectArrayElement(dst_xy,j)); xSrcValues=env->GetIntArrayElements(src_x,NULL);
xDstValues=env->GetIntArrayElements(dst_x,NULL);
for(int k=0;k<x;k++)
{
/*--------此处进行单个元素处理----------*/
xDstValues[k]=xSrcValues[k]*xSrcValues[k];
}
/*-------------------数据写回:x层---------------------*/
env->ReleaseIntArrayElements(src_x,xSrcValues,JNI_ABORT);
env->ReleaseIntArrayElements(dst_x,xDstValues,0); /*----------------数据写回:y层----------*/
env->SetObjectArrayElement(dst_xy,j,dst_x);
}
/*---------------数据写回:z层---------*/
env->SetObjectArrayElement(dst,i,dst_xy);
}
}
Jni :三维数组处理方法 ,以整形三维数组为例 C++实现的更多相关文章
- JavaScript数组对象方法
数组的方法:首先,数组的方法有数组原型方法,也有从object对象继承来的方法.这里只详细说明一下数组的原型方法. (1)join:把数组中的所有元素放入一个字符串.元素通过指定的分隔符进行分隔. 例 ...
- JavaScript ES6 数组新方法 学习随笔
JavaScript ES6 数组新方法 学习随笔 新建数组 var arr = [1, 2, 2, 3, 4] includes 方法 includes 查找数组有无该参数 有返回true var ...
- js类数组转数组的方法(ArrayLike)
1. 什么是类数组ArrayLike(类数组 就是一个普通的 js对象) 类数组对象必须含有 length 属性,且元素属性名必须是数值或者可转换为数值的字符. 类数组对象不是数组对象,所以没有数 ...
- 科学计算三维可视化---Mlab基础(基于Numpy数组的绘图函数)
Mlab了解 Mlab是Mayavi提供的面向脚本的api,他可以实现快速的三维可视化,Mayavi可以通过Mlab的绘图函数对Numpy数组建立可视化. 过程为: .建立数据源 .使用Filter( ...
- .net学习之.net和C#关系、运行过程、数据类型、类型转换、值类型和引用类型、数组以及方法参数等
1..net 和 C# 的关系.net 是一个平台,C#是种语言,C#语言可以通过.net平台来编写.部署.运行.net应用程序,C#通过.net平台开发.net应用程序2..net平台的重要组成FC ...
- php中定义数组的方法
1.PHP定义数组的格式 数组名=array(); 如:$aa=array();//这样就定义了一个数组, 之后给元素赋值: $aa[0]="9016"; $aa[1]=" ...
- 我能考虑到的数组(老)方法就这些了(es5)
代码注释都写的很清楚了 关键字:斐波那契数组.二维数组.多维数组(矩阵)... <!DOCTYPE html> <html lang="en"> <h ...
- [Effective JavaScript 笔记]第51条:在类数组对象上复用通用的数组方法
前面有几条都讲过关于Array.prototype的标准方法.这些标准方法被设计成其他对象可复用的方法,即使这些对象并没有继承Array. arguments对象 在22条中提到的函数argument ...
- JNI动态注册native方法及JNI数据使用
前言 或许你知道了jni的简单调用,其实不算什么百度谷歌一大把,虽然这些jni绝大多数情况下都不会让我们安卓工程师来弄,毕竟还是有点难,但是我们还是得打破砂锅知道为什么这样干吧,至少也让我们知道调用流 ...
随机推荐
- UVA10304
全部遍历.设置两个下标,若相同i++,j++,不相同则j++. #include<stdio.h> #include<string.h> int main(){ ]; ]; s ...
- TypeScript 素描 - 类
本文虽然是学自官方教程而来,但是也融入了自己的理解,而且对官方的例子做了一些修改 /* 类 面向对象编程的一大核心 使用C#.Java进行编程的朋友肯定已经是不能够再熟悉了 TypeScript的类与 ...
- [LeetCode] Reverse Linked List II 倒置链表之二
Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1-> ...
- [LeetCode] Rotate Image 旋转图像
You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...
- VehicleCamera解读
坐标系: z-axis ^ | | y-axis | / | / |/ +----------------> x-axis 围绕Z轴旋转叫做偏航角,Yaw:围绕X轴旋转叫做 俯仰角,Pitch: ...
- 打包SpringBoot工程并部署
使用工具:Eclipse Linux下JDK版本:jdk-7u79-linux-x64.tar.gz 一.打包成jar并部署 步骤如下: 首先上pom.xml: <project xmlns=& ...
- ES6深入学习记录(二)promise对象相关
1.Promise的含义 Promise是异步编程的一种解决方案,比传统的解决方案--回调函数和事件更合理和强大.ES6将其写进了语言标准,统一了用法,原生提供了promise对象. 所谓Promis ...
- Servlet中以HashMap存放临时变量,解决跳转新页面请求参数过多时浏览器地址栏超长
具体使用方法如下: 1.在跳转之前将需要的参数串encodeURIComponent后作为参数value,UUID作为key一起POST到Servlet保存到HashMap中: 2.在Servlet发 ...
- ASE周会记录
本周Sprint Master Atma Hou 一. 本周会议概要 本次会议的主要任务是明确和老师讨论后的数据库设计定稿,同时为我们接下来的连接工作确定包含实现细节的story和接口. 二. 会议内 ...
- 简明 VIM 练级攻略
http://coolshell.cn/articles/5426.html vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个 ...