Изменить значение массива в нативном методе - PullRequest
0 голосов
/ 18 октября 2018

Я хочу изменить каждое значение 2-мерного массива в нативном методе (jobjectArray).Когда я отлаживаю код, отладчик показывает, что значение *body этого указателя изменяется.Однако после возврата к файлам java массивы остаются нетронутыми.Что я делаю не так?

C ++ класс:

JNIEXPORT void JNICALL Java_model_CppDllLibrary_convertToNegative
(JNIEnv *env, jobject obj, jobjectArray image, jint width, jint height) {
printf("Java_model_CppDllLibrary_convertToNegative");

for (int i = 0; i<height; i++) {
    jintArray oneDim = (jintArray)env->GetObjectArrayElement(image,i);
    for (int j = 0; j<width; j++) {
        jint *body = env->GetIntArrayElements(oneDim, false);
        int p = body[j];
        int a = (p >> 24) & 0xff;
        int r = (p >> 16) & 0xff;
        int g = (p >> 8) & 0xff;
        int b = p & 0xff;
        r = 255 - r;
        g = 255 - g;
        b = 255 - b;
        p = (a << 24) | (r << 16) | (g << 8) | b;
        *body = p;
        //env->ReleaseIntArrayElements(oneDim, body, 0);
    }
}
}

Java класс:

int pixels[][] = ImageConverter.converToArrayOfPixels(bufferedImage);
    CppDllLibrary tst = new CppDllLibrary();
    tst.convertToNegative(pixels,pixels[0].length,pixels.length);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...