Android图像处理
首先第一种直接过滤掉,速度极慢,实时性有点坑爹,写应用的可以去弄,感觉不适合笔者这类嵌入式的。NDK提供过一个关于图像处理的demo程序。就是Plasma这个历程吧。大致上讲,图像分成了首先传入,传入一个Jobject对象,然后对对象进行一个分析,NDK层提供了一个图像的解析工具, AndroidBitmapInfo 他主要解析了bitmap类图像的一些基本信息,包括了图像大小,编码格式等等。然后再调用本地工具AndroidBitmap_lockPixels(env, bitmapgray, &pixelsgray)将图像的像素与指针进行关联,同时锁住图像数据。最后,对对应的数据进行处理即可。
如下:
//定义一个结构体
typedef struct {
uint8_t red;
uint8_t green;
uint8_t blue;
uint8_t alpha;
} argb;
//解析图像数据
for (y = 0; y < infocolor.height; y++) {
argb * line = (argb *) pixelscolor;
uint8_t * grayline = (uint8_t *) pixelsgray;
for (x = 0; x < infocolor.width; x++) {
grayline[x] = 255
- ((30 * line[x].red + 59 * line[x].green
+ 11 * line[x].blue) / 100);
}
pixelscolor = (char *) pixelscolor + infocolor.stride;
pixelsgray = (char *) pixelsgray + infogray.stride;
}
这段代码是对图像RGB三通道的转换,变成灰度图像的其中一段,在处理后,要解开对Bitmap的锁定,就可以实现对图像的处理了。
AndroidBitmap_unlockPixels(env, bitmapcolor);
AndroidBitmap_unlockPixels(env, bitmapgray);