【发布时间】:2016-04-04 07:06:05
【问题描述】:
目前我正在开发一个涉及一些图像处理的 Android 应用程序。经过一些研究,我发现最好使用 Android NDK 进行位图操作以获得良好的性能。所以,我找到了一些像这样的基本示例:
static void myFunction(AndroidBitmapInfo* info, void* pixels){
int xx, yy, red, green, blue;
uint32_t* line;
for(yy = 0; yy < info->height; yy++){
line = (uint32_t*)pixels;
for(xx =0; xx < info->width; xx++){
//extract the RGB values from the pixel
blue = (int) ((line[xx] & 0x00FF0000) >> 16);
green = (int)((line[xx] & 0x0000FF00) >> 8);
red = (int) (line[xx] & 0x00000FF );
//change the RGB values
// set the new pixel back in
line[xx] =
((blue << 16) & 0x00FF0000) |
((green << 8) & 0x0000FF00) |
(red & 0x000000FF);
}
pixels = (char*)pixels + info->stride;
}
}
我使用了这段代码,它对于基本操作非常有效,但我想做一个更复杂的代码,比如过滤器,我需要从当前像素访问上方和下方的像素。更具体地说,我给你举个例子:对于膨胀和侵蚀操作,我们移动像素,我们验证像素是否来自西北、北、东北、西、东、西南、南和东南(对于8 个邻居结构元素)是对象像素。我需要知道的是如何使用上面的代码访问南北像素的值。 我不太熟悉使用 C(指针等)进行图像处理。
谢谢!
【问题讨论】:
标签: image-processing bitmap android-ndk java-native-interface