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 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘