mashiro_dell 2018-01-06 05:51 采纳率: 42.9%
浏览 1054
已结题

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

这是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条回答 默认 最新

  • EndlessPhilosophy 2018-01-06 06:09
    关注

    建议你发一下调试日志

    评论

报告相同问题?

悬赏问题

  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3