我在这里就你的问题得到你的建议.对此我是新的蜜蜂,我从昨天开始就陷入困境,但无法解决.
我试图在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中查找二维数组大小所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)