首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在JNI中找到二维数组大小

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

Stack Overflow用户
提问于 2015-04-03 02:47:02
回答 1查看 1.1K关注 0票数 4

我是来找你对我的问题提出建议的。我是新来的蜜蜂,我被困在昨天的这件事上,但无法解决它。我试图在JNI中找到2d数组大小,但没有得到成功的结果。下面是我的代码。你们能帮我解决一下问题吗。

代码语言:javascript
复制
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);
    }
    }*/
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-03 06:46:12

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

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

代码语言:javascript
复制
int rows = env->GetArrayLength(jfilePaths);
jobjectArray firstRow = (jobjectArray)(env->GetObjectArrayElement(jfilePaths, 0));
int columns = env->GetArrayLength(firstRow);

然后,可以迭代如下所示的行和列:

代码语言:javascript
复制
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...
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29425528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档