Cómo encontrar tamaño de matriz bidimensional en JNI
Estoy aquí para obtener sugerencias de usted con respecto a mi problema. Soy una nueva abeja a esto, me quedé atrapado en esto de ayer, pero incapaz de resolverlo. Estoy tratando de encontrar el tamaño de matriz 2d en JNI, pero no estoy recibiendo resultado exitoso. El siguiente código que tengo. Pueden ustedes por favor resolver mi problema.
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); } }*/
- Cómo escanear QRCode en android
- Print Todo el registro de solicitud se llama desde la biblioteca volley
- El objeto de recolección no funciona?
- Cómo publicar datos utilizando el método POST en Android
- Animación de elementos de Android ui
- ¿Qué es más fácil de codificar: aplicación de Android vs iOS aplicación?
- Cómo borrar las preferencias de SharedPreferences en Android, no solo Valores
- ¿Cómo evito que Android Studio colapse automáticamente mis paquetes en la navegación de proyectos?
- Cómo compartir un objeto entre dos subprocesos (sincronización de subprocesos)?
- Análisis de JSON y guardarlos en la base de datos SQLite
- Android, Java, Creación de una miniatura que mantiene la relación de aspecto
- Android Framework?
- Expresión regular de Android para obtener enlaces de la fuente de la página web
Suponiendo que jfilePaths
es una matriz 2D de cadenas declaradas en Java como una String[][]
:
Una matriz 2D es sólo una matriz de objetos donde cada elemento es una matriz de objetos, una para cada fila. Por lo tanto, puede encontrar el recuento de filas obteniendo la longitud de la matriz 2D y el recuento de columnas obteniendo el primer objeto (que será una matriz de objetos que contenga la primera fila de cadenas) y obteniendo la longitud de la misma.
int rows = env->GetArrayLength(jfilePaths); jobjectArray firstRow = (jobjectArray)(env->GetObjectArrayElement(jfilePaths, 0)); int columns = env->GetArrayLength(firstRow);
A continuación, puede iterar a través de las filas y columnas de esta manera:
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... } }
- Android – Cambiar compileSdkVersion conduce a errores
- Dos tipos de parámetros diferentes (cast Object to Type)