我是来找你对我的问题提出建议的。我是新来的蜜蜂,我被困在昨天的这件事上,但无法解决它。我试图在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);
}
}*/发布于 2015-04-03 06:46:12
假设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...
}
}https://stackoverflow.com/questions/29425528
复制相似问题