RGB图像旋转90度编程完成-视频处理基础(3)

来源:互联网 发布:数据库测试包括什么 编辑:程序博客网 时间:2024/05/20 23:40

       今天晚上旋转的代码编写了一下,并且测试成功了~。主要是完成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 

0 0