(原)JNI中env-GetByteArrayElements和AndroidBitmap_getInfo的冲突
也不是很确定,前段时间的代码没有出问题,但是今天调试了半天,一直崩溃:vm aborting。
以前的部分代码:
1 JNIEXPORT void JNICALL XXX 2 (JNIEnv* env,jobject thiz, jobject bitmap, jbyteArray databuf, jint width, jint height) 3 { 4 jboolean* pArraydata = (jboolean*)env->GetPrimitiveArrayCritical(databuf, 0); 5 AndroidBitmapInfo info; 6 int ret; 7 if ((ret = AndroidBitmap_getInfo(env, bitmap, &info)) < 0) 8 { 9 XXX; 10 } 11 if (info.format != ANDROID_BITMAP_FORMAT_RGBA_8888) 12 { 13 XXX; 14 } 15 if ((ret = AndroidBitmap_lockPixels(env, bitmap, &pixels)) < 0) 16 { 17 XXX; 18 } 19 AndroidBitmap_unlockPixels(env, bitmap); 20 env->ReleasePrimitiveArrayCritical(databuf, pArraydata, 0); 21 }
后来发现不用bitmap的这些代码程序没错,或者注释掉GetPrimitiveArrayCritical的相关代码程序也没错。但是两者同时出现的话,程序就崩溃。
之后想到不使用GetPrimitiveArrayCritical,换成别的代码试一下。
1 unsigned char isCopy; 2 jbyte* pArrayimgdata = env->GetByteArrayElements(databuf,&isCopy); % 此处是否使用isCopy都没关系,只要和最后release对应上就行。3 if ((ret = AndroidBitmap_getInfo(env, bitmaps, &info)) < 0) 4 { 5 XXX; 6 } 7 XXX; 8 env->ReleaseByteArrayElements(databuf,pArrayimgdata,isCopy);
程序就不会崩溃了。
ps:仍旧没有弄懂为什么以前的代码可以用,今天就不能用了(当然,以前的代码中还有别的代码,今天的只使用了该部分代码)。
(原)JNI中env-GetByteArrayElements和AndroidBitmap_getInfo的冲突相关推荐
- JNI中String和char之间的相互转换
最近在学习NDK下的opengl es2.0开发,看过很多demos都是直接用一串字符串把shader代码写死的.并没有用一个单独的shader脚本语言文件.glShaderSource()这个 ...
- JNI中参数的传递与操作
Jni中C++和Java的参数传递 如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对Jni不甚了解,不知道Jni是做什么的,如何建立一个基本的jni程序,或许可以参考下面下面这些文章: 利用 ...
- Java笔记-JNI中Java与C语言解决中文乱码问题
目录 基本概念 演示过程 基本概念 这里我把他总结成4个步骤: 1. 找类,Java的String: 2. 找函数String类的方法,成员函数: 3. 设置要转换的字符和编码: 4. 程序生成编码后 ...
- 【JNI】JNI中java类型的简写
在JNI中,当我们使用GetFieldID/GetStaticFieldID或GetMethodID/GetStaticMethodID及定义JNINativeMethod等时,我们需要表示 ...
- JNI中C调用Java方法
我们需要在JNI的C代码调用Java代码.实现原理:使用JNI提供的反射借口来反射得到Java方法,进行调用. JNI关键方法讲解. 1. 在同一个类中,调用其他方法 JNIEXPORT voi ...
- Java Native Interface 六JNI中的异常
本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 在这里只讨论调用JNI方法可能会出现的异常, ...
- 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( jni 中 main 函数声明 | 命令行处理 | jni 调用 lib7zr.so 函数库处理压缩文件完整代码 )
文章目录 一.JNI 中 main 函数声明 二.命令字符串切割并传入 main 函数 三.完整代码示例 1.完整 jni 代码 2.完整 java 代码 3.执行结果 四.参考资料 前置博客 : [ ...
- JNI中java类型的简写
在JNI中,当我们使用GetFieldID/GetStaticFieldID或GetMethodID/GetStaticMethodID及定义JNINativeMethod等时,我们需要表示成员变 ...
- Java Native Interface 二 JNI中对Java基本类型和引用类型的处理
本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 Java编程里会使用到两种类型:基本类型(如 ...
- android+jni+构造函数,在JNI中调用构造函数失败Android
我想从我的JNI Android代码调用构造函数;但不知何故,它失败,以下例外.. 我相信我失去了一些非常小的东西;但我无法弄清楚......任何人都可以请指出?在JNI中调用构造函数失败Androi ...
最新文章
- 转换字符串中汉字为其拼音缩写(C#)
- R语言ggplot2绘制平滑曲线的折线图简单小例子
- Three.js学习笔记 – “我和小伙伴都惊呆了”的特效和Three.js初探
- ML之回归预测:利用Lasso、ElasticNet、GBDT等算法构建集成学习算法AvgModelsR对国内某平台上海2020年6月份房价数据集【12+1】进行回归预测(模型评估、模型推理)
- 【软考-软件设计师】计算机安全
- [Debug]IOS微信浏览器不支持form表单的target=_blank
- Python基础——PyCharm版本——第七章、面向对象编程
- Java 并发(JUC 包-05)
- 让你的原创设计作品展示给世界|设计师的舞台
- 树莓派教程 - 2.2 树莓派CSI摄像头,raspivid、raspistill常用参数
- iOS分段选择器、旅行App、标度尺、对对碰小游戏、自定义相册等源码
- install texlive-full on ubuntu
- python学习(十八)爬虫中加入cookie
- 新物联网时代的整合战略
- C#中索引超出了数组界限如何解决
- 速锐得驾培驾考免接线OBD数据价值及发展思路
- linux 搭建文件服务器(vsftpd)
- oracle服务名XDB_Oracle XDB和XPT
- JNI 方法大全及使用示例
- 【文件类型转换】.mat后缀文件 转化为 .xml后缀文件