今天晚上旋转的代码编写了一下,并且测试成功了~。主要是完成RGB 24位的图像旋转;
下面是源代码
bool rgb24_rotate_90(unsigned char *src_rgb,unsigned int iWidth,unsigned int iHeight,bool direction)
{
if(!src_rgb)
return false;
unsigned int n=0;
unsigned int linesize=iWidth*3;
unsigned char *dst_rgb = (unsigned char*)malloc(iWidth*iHeight*3);
int i,j;
if(direction)
{
for(j=iWidth;j>0;j--)
for(i=0;i<iHeight;i++)
{
memcpy(&dst_rgb[n],&src_rgb[linesize*i+j*3-3],3);
n+=3;
}
}
else
{
for(j=0;j<iWidth;j++)
for(i=iHeight;i>0;i--)
{
memcpy(&dst_rgb[n],&src_rgb[linesize*(i-1)+j*3-3],3);
n+=3;
}
}
memcpy(src_rgb ,dst_rgb ,iWidth*iHeight*3); // itmp = iLBytes*iHeight;
free(dst_rgb);
return true;
}
那有怎么来验证正确性呢?
以下是我的方法;
之前我编写过用Directshow打开摄像头的程序;然后我就取出摄像头的一帧,将这一帧图像的数据旋转,然后保存成JPEG图像保存出去了;
主要是以下几个函数。
pGrabber->GetCurrentBuffer(&cbBuffer, (long *)pBuffer); //获取一帧图像数据cbBuffer为得到的unsigned char,pBuffer为总花的点数
rgb24_rotate_90(pBuffer,frameSetW,frameSetH,false);
逆时针旋转90度
顺时针旋转90度
编程环境:Window7 32位;编程工具:VS2010