深入了解android平台的jni---图像灰度化处理
一、涉及到的jni编程知识
Java基本类型的数组,在JNI中都是jArray的类型格式。具体类型如下:
JNIEXPORT jintArray JNICALL Java_org_join_image_util_JoinImage_imgToGray( JNIEnv* env, jobject obj, jintArray buf, int w, int h) { LOGE("==imgToGray=="); jint * cbuf; cbuf = (*env)->GetIntArrayElements(env, buf, 0); // 获取int数组元素 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(env, size); // 新建一个jintArray (*env)->SetIntArrayRegion(env, result, 0, size, cbuf); // 将cbuf转存入result (*env)->ReleaseIntArrayElements(env, buf, cbuf, 0); // 释放int数组元素 return result; }
本文欢迎转载,但请注明出处与作者
出处:http://blog.sina.com.cn/staratsky
作者:流星