JNI NewIntArray() 无法创建大数组
JNI NewIntArray() can't create big array
我使用本指南使用JNI调用用Android类位图加载PNG文件http://lol.zoy.org/blog/2011/3/2/load-pngs-using-android-ndk.
在我尝试从位图中获取像素数据之前,这是完美的。我只是无法创建一个适合图像数据(512*256)的精灵数组,应用程序在这一行崩溃了。我做了一些测试,它只适用于大小<=85000(在我的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)
异常在JNI中不会自动发生。你必须编写代码来触发它们。也就是说,它将错误存储在某个地方,并且您必须添加代码来说明您希望在哪里触发异常。
http://java.sun.com/docs/books/jni/html/exceptions.html
发件人http://www.google.co.uk/search?q=java+png+库
http://code.google.com/p/javapng/
http://code.google.com/p/pngj/
我不知道哪个更好。
您需要向我们展示崩溃。NewIntArray不应该崩溃;它应该返回NULL。(如果NewIntArray失败,env->ExceptionCheck()也将返回true。)但是崩溃应该会告诉你问题出在哪里,所以你需要显示"adb-logcat"输出。
- 在将 new 与指针一起使用时,创建数组的指定长度
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- 合并排序不排序自创建数组类 c++
- 基于参数创建数组
- 使用new创建数组而不声明大小
- c++用输入数据创建数组
- 从类 c++ 动态创建数组
- 如何使用 void 函数从类创建数组
- 未知大小的数组作为类成员,用于在运行时(对象创建时间)创建数组的对象
- 如何在不知道Arduino中知道其大小的情况下创建数组和存储值
- 使用动态分配创建数组并将元素插入其中
- 是否可以使用C 函数中的const int参数创建数组
- 如何在C++函数中创建数组
- 使用 ::std::vector 创建数组
- 在编译时以增量方式创建数组
- Numpy C API - 使用 PyArray_Descr 创建数组会导致段错误
- 为什么当我尝试在类中创建数组时"invalid use of non-static data member"我会收到错误?
- 取消引用指针以创建数组的副本
- C++ 在堆上创建数组而不对其进行初始化
- 数组的维度是在创建数组的那一刻确定的,以后不能更改的,这是真的吗?