好久没有写算法代码了,最近由于手机产品需要对图像进行旋转90度,写了个基本的验证算法,
在android手机x10i上也试验过:
APP_ABI:armeabi 176x144的图像平均10ms左右可以完成,320x240的图像30ms左右可以完成
APP_ABI:armeabi-v7a 176x144的图像平均2ms左右可以完成,320x240的图像10ms左右可以完成
/*
* 图像旋转
* 将图像向左旋转90度,以下为具体算法
* 针对RGB,24图像
*/
void rotate_90_left()
{
int src_width = 144;
int src_height = 176;
int dst_width = 176;
int dst_height = 144;
uint8_t* lp_src = new uint8_t[src_width*src_height*3];
uint8_t* lp_dst = new uint8_t[dst_width*dst_height*3];
OutputDebugString("源图像数据:\n");
for(int h=0;h<src_height;h++)
{
for(int w=0;w<src_width;w++)
{
//此处为构造源图像,实际应用时可以去掉下面
lp_src[w*3 + h*src_width*3 + 0] = w;
lp_src[w*3 + h*src_width*3 + 1] = w;
lp_src[w*3 + h*src_width*3 + 2] = w;
输出源图像数据
char xx[32]={0};
sprintf(xx,"%03d%03d%03d ",
lp_src[w*3 + h*src_width*3 + 0],
lp_src[w*3 + h*src_width*3 + 1],
lp_src[w*3 + h*src_width*3 + 2]);
OutputDebugString(xx);
//将源图像素点值赋给新的图像
lp_dst[(dst_height-w-1)*dst_width*3 + h*3 + 0]= lp_src[w*3 + h*src_width*3 + 0];
lp_dst[(dst_height-w-1)*dst_width*3 + h*3 + 1]= lp_src[w*3 + h*src_width*3 + 1];
lp_dst[(dst_height-w-1)*dst_width*3 + h*3 + 2]= lp_src[w*3 + h*src_width*3 + 2];
}
OutputDebugString("\n");
}
开始输出调试日志,以查看目标图像数据是否正确
OutputDebugString("目标图像数据:\n");
for(int x=0;x<dst_height;x++)
{
for(int y=0;y<dst_width;y++)
{
char xx[32]={0};
sprintf(xx,"%03d%03d%03d ",
lp_dst[y*3 + x*dst_width*3 + 0],
lp_dst[y*3 + x*dst_width*3 + 1],
lp_dst[y*3 + x*dst_width*3 + 2]);
OutputDebugString(xx);
}
OutputDebugString("\n");
}
结束输出调试日志
}