android开发过程中用jni封装了一个灰度图算法,调用后运行时程序崩溃 10C

这是jni的.cpp文件
#include
#include
#include
#include

JNIEXPORT jintArray JNICALL Java_com_example_imagetogray_LibFuns_ImgToGray(
JNIEnv* env, jobject obj, jintArray buf, int w, int h) {
jint *cbuf;
cbuf = env->GetIntArrayElements(buf,0);
if (cbuf == NULL) {
return 0;
}

int alpha = 0xFF; // 不透明值
int i, j, color, red, green, blue;
for (i = 0; i < h; i++) {
    for (j = 0; j < w; j++) {
            color = cbuf[w * i + j]; // 获得color值
            red = (color >> 16) & 0xFF; // 获得red值
            green = (color >> 8) & 0xFF; // 获得green值
            blue = color & 0xFF; // 获得blue值
            color = (red * 38 + green * 75 + blue * 15) >> 7; // 灰度算法(16位运算下7位精度)
            color = (alpha << 24) | (color << 16) | (color << 8) | color; // 由ARGB组成新的color值
            cbuf[w * i + j] = color; // 设置新color值
        }
   }

int size=w * h;
jintArray result = env->NewIntArray(size);
env->SetIntArrayRegion(result, 0, size, cbuf);
env->ReleaseIntArrayElements(buf, cbuf, 0);
return result;

}

这是调用过程:
class ClickEvent implements View.OnClickListener{
@Override
public void onClick(View v) {
if(v==btnJAVA)//采用的是java库类直接实现灰度图
{
Bitmap img=ConvertGrayImg(ImagePath);//ImagePath是sd卡图片路径
imgView.setImageBitmap(img);
}
else if(v==btnNDK)
{
Bitmap img1=BitmapFactory.decodeFile(ImagePath);
int w=img1.getWidth(),h=img1.getHeight();
int[] pix = new int[w * h];
img1.getPixels(pix, 0, w, 0, 0, w, h);//通过getPixels获取Bimap中的图片数据
int[] resultInt=LibFuns.ImgToGray(pix, w, h);//调用so中的灰度图处理方法
Bitmap resultImg=Bitmap.createBitmap(w, h, Config.RGB_565);
resultImg.setPixels(resultInt, 0, w, 0, 0,w, h);
imgView.setImageBitmap(resultImg);

}
}
}

请大神指点!!!!
1

4个回答

0

JNIEXPORT jintArray JNICALL Java_com_example_imagetogray_LibFuns_ImgToGray(
JNIEnv* env, jobject obj, jintArray buf, int w, int h) {
jint *cbuf;
cbuf = env->GetIntArrayElements(buf,0);
if (cbuf == NULL) {
return 0;
}

如果cbuf不为空呢,你返回什么,没有return,肯定报错

0

建议你发一下调试日志

-1

既没来见你加载so库的代码,又没看见你本地方法,还不知道你的错误日志

-1
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
封装通用的底部导航栏
陆陆续续的也做了几个项目,发现项目中很多东西都是通用的,懒是程序员的一个优点,为了避免重复造轮子的现象,因此一次性将这些轮子造出来,方便以后拿来就用。 先看效果: 这就是封装的一个效果了。大家看我只用了几行代码就实现了这个效果: public class MainActivity extends BottomTabBaseActivity{ @Override pr
Android官方开发文档Training系列课程中文版:Android的JNI相关
原文地址:http://android.xsoftlab.net/training/articles/perf-jni.htmlJNI的全称为Java Native Interface,中文意思是Java本地接口。它定义了Java代码与C/C++代码之间的交互方式。它是两者的桥梁,支持从动态共享库中加载代码。虽然有些复杂,但是它的执行效率还是蛮高的。如果你对JNI还不太熟悉,那么可以通过Java N
Android Jni OpenCV图片灰度处理
一,java代码,收集Bitmap 信息 public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Button btnProc; private ImageView imageView; private Bitmap bmp;// Used to load the 'n
Android NDK开发之一:NDK与JNI基础
一、导读 在Android OS上开发应用程序,Google提供了两种开发包:SDK和NDK。你可以从Google官方查阅到有许多关于SDK的优秀书籍、文章作为参考,但是Google提供的NDK资源,相对于SDK还是比较少的。本系列文章主要是用于,自己记录自学NDK的经验,并且希望能够帮助到哪些想学习NDK的朋友。 Android 平台从一开就已经支持了C/C++了。我们知道Android...
.so的封装调用
.so的创建和调用有一个特点,我们要知道.so的调用并不一定必须在Activity中进行,那么制作时也并不一定要在Activity中,但是,一旦.so制作成功,那么再调用时,调用的java类就必须跟制作.so时的java类(包括路径和类名)必须一致!   举个例子:拿上篇文章来说,我在创建.so时是在MainActivity中调用的,路径名是com.byl.jnitest,那么最终生成的.so想
彩图转灰度图算法
今天试了下一个前辈的ndk彩图转灰度图的算法,有点小瑕疵,于是就剖析了下这个算法。 核心代码如下 int alpha = 0xFF << 24; for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { // 获得像素的颜色 int color = cbuf[w * i + j]; int r
Andorid之jni里面崩溃然后用errno分析结果解决问题
1、问题 在jni里面程序崩溃了,初步定位是这行代码,下面的结果运行既然小于0,我觉得很奇怪,理论上不应该啊,想不到为什么会小于0 if ((sock_fd = socket(PF_INET, SOCK_STREAM, 0)) 2、解决办法 在文件里面加上#include头文件,既然这里出错了,就用errno,然后在这个崩溃地方打印出这个 errno的
Android Jni OpenCV-灰度图像的直方图
一,java代码,收集Bitmap 信息public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Button btnProc; private ImageView imageView; private Bitmap bmp;// Used to load the 'nat
android studio 实现类似百度地图 发布SDK机制实现(jni实现调用C++的so库,并封装jar包)
本文主要是Android JNI编程相关,包括java接口打包jar包,c++编译so库,通过jni调用。并在一个全新的android项目中测试使用我们自己发布的sdk的整套流程。 写这篇文章的主要目的是,网上好像并没有这么一整套的机制实现参考。 android studio 类似百度地图 发布SDK机制实现(jni实现调用C++的so库,并封装jar包)
Android jni调用java方法遇到的坑
今天jni调用java方法的时候一直报错,说找不到java方法 刚开始还以为是方法名和签名写错了,查了半天,也没找到问题最后在build.gradle中发现debug的时候开启了混淆,最后在proguard-rules.pro中不让混淆才解决了-keep class com.pf.ffmpegmusicdemo.*{*;} 总结:搞jni的时候慎用proguard
android jni中的java调c的两种方法
终于有个时间来整理以前的一些笔记,android最大的特点就是native/art虚拟机,因此就有了NDK编程和SDK编程的区别 NDK是使用了本地接口(c /c++)jni,sdk则是java层的接口;因此读懂和了解jni是关键
JNI开发(一) 简单的C代码打包成SO库以及项目如何调用SO库
前段时间开发过程中用到了简单的JNI使用,当时发现很多网上文章总有这样那样的问题,最近趁时间充裕就记录下来,以供记忆和交流。JNI环境配置这里就不做多讲,百度一下,把脚跨过墙就好。写一个简单的SO库先在项目中创建一个类,里面暴露出本地代码的接口。随后使用Terminal 执行生成.h的命令,将目录先定位到java目录,再执行 javah -jni com.monke.simplejnidemo.S
dll调用后程序崩溃 0xc0000005
程序本身是dll,又调用了个发送sms的dllrn结果在SMSA这个函数调用返回时,出错,0xc0000005rnrnrn调用约定都是__cdeclrnrn参数全部是CString& rnrndebug 和 release 都出错了,内存错误,都不知道怎么去调试,求助啊啊啊啊啊啊rnrn[code=C/C++]void SMSA()//调用发送sms的动态链接库[/code]rnrnrncall stackrnrn调用前:rnFile_Manger::SMSAlert(char * 0x101399f4, char * 0x00000000) line 7676rnCManager::CManager(CDatabase * 0x1014cf40, CDatabase * 0x1014cf40, char * 0x003b1224, char * 0x003b122a) line 331rnCiastkup::ManagerProcess(char * 0x003b1224, char * 0x003b122a) line 302 + 55 bytesrnDO_WORK(char * 0x0012eddc, char * 0x003b120d, char * 0x0012ef80, char * 0x003b121c, char * 0x003b121c, char * 0x003b1224, char * 0x003b122a, HWND__ * 0x00000000, int 1, long 8, int 5) line 181 + 18 bytesrnDOWORK! 0040226f()rn003b120d()rn5c6b7361()rnrn调用后:rnFile_Manger::SMSAlert(char * 0x101399f4, char * 0x00000000) line 7651rnCManager::CManager(CDatabase * 0x1014cf40, CDatabase * 0x1014cf40, char * 0x003b1224, char * 0x003b122a) line 331rnCiastkup::ManagerProcess(char * 0x003b1224, char * 0x003b122a) line 302 + 55 bytesrnDO_WORK(char * 0x0012eddc, char * 0x003b120d, char * 0x0012ef80, char * 0x003b121c, char * 0x003b121c, char * 0x003b1224, char * 0x003b122a, HWND__ * 0x00000000, int 1, long 8, int 5) line 181 + 18 bytesrnDOWORK! 0040226f()rn003b120d()rn5c6b7361()
Android NDK 开发(一)JNI简介及调用流程
转载请标明出处: http://blog.csdn.net/u011974987/article/details/52602913 本文出自:【stromxu的博客】 前言前段时间学习了C、C++的一些基础知识后,了解了它们的编码风格,要想掌握NDK开发,前提是会使用JNI,下面我们开始简单的介绍吧!JNI简介  JNI全称是Java Native Interface(Java本地接口),本
Android 平台的Python——JNI方案(二)
关于在Android项目中嵌入解释器,实现Java与Python相互调用,以有好的项目提供了思路,地址:https://github.com/joaoventura/pybridge我这里说一下简单实现1、环境准备配置好crystax ndk环境,并创建一个NDK项目,将crystax 包下面的 libpython3.5m.so拷贝至工程 lib/armeabi目录下2、编写为Java 编写 nat
Jni C/C++运行时遇到异常怎么办?捕获与抛出
有个头疼的问题,Jni C/C++遇到问题闪退怎么办?有办法,我们可以在异常发生后通过判断清除异常解决,保持程序及时反应处理。 比如: package crash; import java.security.NoSuchAlgorithmException; public class DogUtils { // Used to load the 'native-lib' libra
Android平台下使用OpenCV灰度化图片的两种方式
在OpenCV中灰度化图像是比较常用的操作之一,这篇文章介绍了两种方法对图像进行灰度化并显示出来。
JNI与C/C++的调用与封装(Demo应用)
  项目中使用JNI的地方,如:核心逻辑,密钥,加密逻辑。JNI还有很多的应用,比如FFMPEG,OpenGL等。 JNI常见的场景如:加解密算法,音视频编解码等。 -- 使用JNI,复用很多优秀的c/c++代码:ffmpeg 多媒体播放器;opencv 图形识别引擎;7-zip 压缩;opencore 视频播放   C/C++实现的算法,JNI封装(SO文件,动态链接文件),Java、An...
Android~几个图像处理方法(灰度化、线性灰度变化、二值化)
最近要开发一个图像取模APP,需要用到安卓简单图像处理,用OpenCV来做也可以。查了下,大家的做法也差不多。转自Android下常用的图像处理程序(灰度化、线性灰度变化、二值化) 1、图像灰度化: public Bitmap bitmap2Gray(Bitmap bmSrc) { // 得到图片的长和宽 int width = bmSrc.getWidth()...
彩色图转灰度图算法 cocos2dx实现
备忘一下. //得到灰度CCSprite, int l_iGrayValue = (int)(l_iR*0.299 + l_iG*0.587 + l_iB*0.114); CCSprite* Tools::getGraySpriteWithFile(const char* p_file){     CCSprite* l_sprite = Tools::getSpriteWith
Android Studio里把YUV图片的byte[]从JAVA传到C++层转为mat
通过JNI把byte[]传到cpp中格式为jbyteArray //image是jbyteArray格式的 jbyte* imgBytes = env-&amp;gt;GetByteArrayElements(image, 0); int imgsize = env-&amp;gt;GetArrayLength(image); jbyte再传到cpp中变为void,再memcpy到unsi...
树莓派基于wiringPi库, 编写JNI本地动态库供Java调用
RaspberryPi 基于wiringPi库, 编写JNI本地动态库供Java调用(demo)本文关键字: RaspberryPI Java JNI wiringPi库 什么是JNI JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。 —— [ WiKi ] 在这之前, RaspberryPi已经提供了Pi
Android JNI层中图像处理算法优化方法记录
1. Android NDK开发过程记录 (1). 创建JNI头文件     在工程目录下输入: 点击(此处)折叠或打开 javah -classpath bin/classes -d jni com.example.rgbir.rgbirJNI 遇到的问题: 点击(此处)折叠或打开 error: canno
AndroidStudio JNI开发:生成可调用jar
我们知道JNI开发无论是静态注册还是动态注册,都会有跟相关包名类名绑定的情况,因此无法在其他项目正确引用,解决此问题一般是采用编写一个对应的接口java类,将so一并打包成jar,即可供开发者正确使用。       本文主要目的: 用于解决生成的.so库中,jni的方法名有包名的限制,导致其他项目工程引用时,包名不一致,出现jni层接口调用无效的问题。1、新建Android Library 在p
上层使用jni(从java层到framework到JNI的用法过程)
MTK平台如果在硬件上增加了按键灯,framework层想要调用的话,这里简单介绍一下我的使用过程。 首先,需要增加KeyLed.c和头文件KeyLed.h两个接口函数: (\hardware\libhardware_legacy\key_leds\key_leds.c) ( \hardware\libhardware_legacy\include\hardware_legacy\KeyLe
linux下封装jni的so库注意点记录
1.Makefile文件要写好:生成的库名称为lib+库名+.soLINKOUT = libAlgorithm.soDIR_OBJ = ./ DIR_SRC = ./SRC = (wildcard(wildcard (DIR_SRC)/*.cpp) OBJS = (patsubst(patsubst %.cpp, (DIR_OBJ)/%.o, (notdir(notdir (SRC)))包含头文
使用JNI 调用第三方c++动态库
昨天晚上到今天一直在折腾这个第三方库文件,唉,要哭了,一直就是各种问题。现在详细说说怎么做,踩过哪些坑。
JNI调用出现XXX遇到问题已退出解决方法
在JNI调用中经常会遇到异常导致APK闪退的现象,而这种问题通常很难定位,要定位这种问题,需要: 1:首先在logcat中加入debug(方法如图所示): 2:在运行后报错中会在debug中找到类似这样的一串错误 看到这个长长的错误,不要慌,我们就要拿着这个错误去分析: 首先,从这个长长的串中找到有用的信息 10-28 12:39:17.779: I/DE
Android Studio——配置OpenCV的方法及灰度化demo范例
Android Studio——配置OpenCV的方法及demo范例 前言:本人最近半年在做一个有关机器视觉的机器人项目,是用的安卓平台开发的,对android studio也是一个刚入门的客人,在这半年里也是全靠自学才变得熟练许多,为了大家少走些弯路才打算做这个文章。 准备工作 第一步:下载并安装Android Studio,这个可以自己去Android Studio 中文社区
AndroidStudio jni开发入门及打包so库和jar包
AndroidStudio jni开发入门及打包so库和jar包 配置ndk开发环境 下载NDK,LLDB,CMake工具包 配置系统环境变量 在原有项目中进行jni开发环境配置 Androidstudio2.0之后新建的项目可直接生成cpp项目,所有详细说下在原有项目中进行jni开发环境配置: 在src/main文件夹下建一个cpp文件夹(这里存放jni代码) 在app文件夹下建一个...
Android——JNI项目使用Cmake打包生成.so库和jar包
         最近项目中需要将当前开发的JNI项目封装成SDK的形式供第三方app调用,而且我当前项目还引用了外部静态库。大家都知道java的代码可以以Module的形式打包成jar包,而jni中C或C++的代码可以输出so动态库,那么这俩如何结合起来也是个问题。看了很多文章,因为了解不多,以为这个是很复杂的事情,自己研究了一下才发现还是挺简单的。         一、首先项目是要把项目转换为...
Android中有没有办法通过jni在Linux内核获取摄像头yuv数据??
本人移植了ffmpeg库在Android上,但是在对视频编码的时候是通过java层camera接口获取yuv数据的,然后传给jni处理。但这效果很差,而且这个获取yuv的接口还不是纯正的yuv采集,采用回调这样的方式采集。现在就有个问题如何通过jni获取摄像头的yuv数据,当然,我看了V4l2,但是手机里面没有video0这个摄像头映像文件。求大神支个招。。
JNI基础(六)C调java代码
java如何调用C代码,大概已经了解了,通过是先本地方法来调用。那么C代码如何代用java代码 套路与思路:通过反射 java代码: public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) {
使用jni实现在C语言中调用Java的方法
在前面的博客中介绍了jni的使用以及使用jni实现在java中调用c语言的方法,这篇博客将介绍在c语言中调用java方法 在写代码前,先看一下实现的效果 实现方式(部分步骤有所省略,详细的步骤可以参考我前面的博客) 第一步:使用eclipse创建一个Android工程,并且修改activity_main.xml文件中的代码 <LinearLayout xmlns:andro
Android JNI操作Bitmap实现黑白图片
最近想练习一下NDK,基于我接下来的目标是多媒体,多以想多点学习一下关于滤镜的知识,黑白滤镜是最简单的了。 这里实现的是将一张彩色图片转成黑白图片,是黑白滤镜的基础! 直接上码: // java 代码 public void gray(View view) { Bitmap source = BitmapFactory.decodeResource(getResources(), R.dr...
在JNI中对图像的处理
r
NDK实现后台服务保活
现在的国产手机基本都是不能保证的 随随便便一杀就没了 复活不了;我的华为P9就不行,其他的我觉得也够呛,但是使用公司自己得MTK5.0平台, 那真是特吗和病毒没什么区别。。。 我这是在腾讯课堂里学习来得;动脑学院,挺好得一个学习android看视频得地方; 1: java方式守护 AndroidMainfast.xml 中定义process = “:remote”字段; 手机厂商...
Android 打包包含jni代码jar包
Android studio 通过jar调用jni so库.相匹配的还有一个调用测试的demo。链接就在我的下载资源里面。
Android程序崩溃,如何根据崩溃的日志信息定位出崩溃的行数
在编译Android底层的jni程序时,有两种编译方式:ndk和cmake,现在针对两种不同的编译方式来定位出崩溃的具体行号 ndk: 1、找到你的项目工程里的jni生成的目录,比如说目录为:obj/armeabi/objs/ 2、拿到崩溃的地址,例如:0xabcb1c3d 3、假如说日志崩溃到libgguardian.so库里了,在命令行里执行 arm-linux-androideabi-add...
Android Studio NDK开发 正确调用jni 及加入第三方so库需要注意的问题
Android Studio NDK开发 正确调用jni 及加入第三方so库需要注意的问题 首次使用Android Studio进行NDK开发会遇到很多问题, 我在此将自己的经验分享给大家 直接上配置比较直观 下面是在项目 app源根文件夹下build.gradle文件的配置, 都写明了注释 android { compileSdkVersion 23
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 机器学习大数据调参 机器学习中大数据集调参