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);

}
}
}

请大神指点!!!!

4个回答

建议你发一下调试日志

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

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,肯定报错

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问