我使用 JNI 调用通过 Android 类位图加载 PNG 文件使用本指南 http://lol.zoy.org/blog/2011/3/2/load-pngs-using-android-ndk .
在我尝试从位图中获取像素数据之前,这一切都完美无缺。我无法创建适合图像数据 (512*256) 的 jint 数组,应用程序在此行崩溃。我做了一些测试,它只对大小 <= 85000 的 jint 数组(在我的 HTC Desire 上)有效而不会崩溃。
我认为这是一些内存不足的错误,但我在 logcat 中没有收到相关错误,我尝试只创建一个 jint 数组而没有任何其他代码它也会崩溃。
#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;
附言如果有人可以提供从 Java 代码加载 png 的替代方法(没有 pnglib 和像 http://androgeek.info/?p=275 中的 native 函数),那将是很棒的
最佳答案
异常不会在 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/
我不知道哪个更好。
关于java - JNI NewIntArray() 无法创建大数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9174228/