JNI NewIntArray () не может создать большой массив - PullRequest
1 голос
/ 07 февраля 2012

Я использую вызовы JNI для загрузки файлов PNG с помощью растрового изображения класса Android с помощью этого руководства http://lol.zoy.org/blog/2011/3/2/load-pngs-using-android-ndk.
И это работает безупречно, пока я не попытаюсь получить данные пикселей из растрового изображения. Я просто не могу создать массив jint, который будет соответствовать данным изображения (512 * 256), приложение просто падает на этой строке. Я провожу тестирование, и оно работает без сбоев только с массивами jint размером <= 85000 (на моем HTC Desire). Я думаю, что это ошибка нехватки памяти, но я не получаю соответствующей ошибки в logcat, и я пытаюсь создать только массив jint без какого-либо другого кода, он тоже вылетает. </p>

#include <jni.h>    

int load_image_png(const char* path, GLuint* width, GLuint* height, void** image_data){
//Skip part what works fine - get bitmap width and height
//width=512, height=256

 jintArray array = g_env->NewIntArray(width*height);//FAIL OVERHERE

 jint* pixels = g_env->GetIntArrayElements(array, 0);
 *image_data = pixels;

 //closing a bitmap work fine too

 return 0;

}

P.S. Было бы здорово, если бы кто-то мог дать альтернативный способ загрузки png из кода Java (без pnglib и нативных функций, как в http://androgeek.info/?p=275)

Ответы [ 2 ]

1 голос
/ 11 февраля 2012

вам нужно показать нам аварию.NewIntArray не должен падать;он должен вернуть NULL.(env-> ExceptionCheck () также вернет true, если NewIntArray не получился.), но сбой должен сообщить вам, в чем проблема, поэтому вам нужно показать вывод adb logcat.

1 голос
/ 07 февраля 2012

Исключения не происходят автоматически в JNI. Вы должны написать код, чтобы вызвать их. т.е. где-то хранится ошибка, и вы должны добавить код, чтобы указать, где вы хотите, чтобы исключение было вызвано.

http://java.sun.com/docs/books/jni/html/exceptions.html


С http://www.google.co.uk/search?q=java+png+library

http://code.google.com/p/javapng/

http://code.google.com/p/pngj/

Я не знаю, что лучше.

...