如何在JNI中查找二维数组大小

如何在JNI中查找二维数组大小,第1张

概述我在这里就你的问题得到你的建议.对此我是新的蜜蜂,我从昨天开始就陷入困境,但无法解决.我试图在JNI中找到2d数组大小,但是没有得到成功的结果.我有以下代码.你能解决我的问题.JNIEXPORTjintJNICALLJava_com_example_imagejoiner_MyJoiner_test(JNIEnv*env,

我在这里就你的问题得到你的建议.对此我是新的蜜蜂,我从昨天开始就陷入困境,但无法解决.
我试图在JNI中找到2d数组大小,但是没有得到成功的结果.
我有以下代码.你能解决我的问题.

JNIEXPORT jint JNICALL Java_com_example_imagejoiner_MyJoiner_test(jnienv*         env,      jobject javaThis) {   LOGV("test print");   return 1; }  JNIEXPORT voID JNICALL       Java_com_example_imagejoiner_MyJoiner_joinNative(jnienv* env,    jobject javaThis, jobjectArray jfilePaths, Jstring jfinalimagePath, int    verticaloverlapPercent, int horizontaloverlapPercent) {  const char *finalimagePath = env->GetStringUTFChars(jfinalimagePath, 0);  const int imageCount = env->GetArrayLength(jfilePaths);  int rows = 1;  int columns = 4;  Mat imageBuff[rows][columns];  /*for (int i = 0; i < imageCount; i++) {    Jstring filePath = (Jstring) env->GetobjectArrayElement( jfilePaths, i);    const char *rawString = env->GetStringUTFChars(filePath, 0);    LOGV("reading = %s", rawString);    imageBuff[i] = imread(rawString, 1);    if(!imageBuff[i].data) {        LOGV("Failed to read = %s", rawString);    }    env->ReleaseStringUTFChars(filePath, rawString);    }*/   //Creating a 2 dimensional array from the lIEaner array   int k = 0;   for (int i = 0; i < rows; i++)   {    for (int j = 0; j < columns; j++)    {        Jstring filePath = (Jstring) env->GetobjectArrayElement( jfilePaths,         k);        const char *rawString = env->GetStringUTFChars(filePath, 0);        LOGV("reading = %s", rawString);        imageBuff[i][j] = imread(rawString, 1);        if(!imageBuff[i][j].data) {            LOGV("Failed to read = %s", rawString);        }        env->ReleaseStringUTFChars(filePath, rawString);        k++;      }  }  //Creating a 2 dimensional array from the 2 dimensional array  /*for (int i = 0; i < rows; i++)  {    JstringArray filePath = (JstringArray) env->GetobjectArrayElement(         jfilePaths, i);    for (int j = 0; j < columns; j++)    {        const char *rawString = env->GetStringUTFChars(filePath, j);        LOGV("reading = %s", rawString);        imageBuff[i][j] = imread(rawString, 1);        if(!imageBuff[i][j].data) {            LOGV("Failed to read = %s", rawString);        }        env->ReleaseStringUTFChars(filePath, rawString);    }    }*/

解决方法:

假设jfilePaths是一个在Java中声明为String [] []的字符串的2D数组:

2D数组只是一个对象数组,其中每个元素本身就是一个对象数组,每行一个.因此,您可以通过获取2D数组的长度来查找行计数,通过获取第一个对象(将是包含第一行字符串的对象数组)并获取其长度来查找列数.

int rows = env->GetArrayLength(jfilePaths);jobjectArray firstRow = (jobjectArray)(env->GetobjectArrayElement(jfilePaths, 0));int columns = env->GetArrayLength(firstRow);

然后你可以像这样遍历行和列:

for(i = 0; i < rows; i++){    jobjectArray currentRow = (jobjectArray)((env->GetobjectArrayElement(jfilePaths, i));    for(j = 0; j < columns; j++)    {        Jstring filePath = (Jstring)((env->GetobjectArrayElement(currentRow, j));        const char *rawString = env->GetStringUTFChars(filePath, 0);        // do stuff...    }}
总结

以上是内存溢出为你收集整理的如何在JNI中查找二维数组大小全部内容,希望文章能够帮你解决如何在JNI中查找二维数组大小所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1118075.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存