C++画像RGB24は90度回転し、YUV420は90度回転します

//反時計回りに90度回転

void RGBRotate90_anti時計回り(BYTE *des,BYTE *src,int幅,int高さ)

{

  if ((!des)||(!src))

     {

    戻る;

     }    

  int n = 0;

  int linesize = 幅*3;

  int i,j;

  for (j=幅;j>0;j--)

  {

     for (i=0;i<高さ;i++) 

      { 

      memcpy(&des[n],&src[linesize*i+j*3-3],3);

      n+=3;

     }

  }

}

//時計回りに90度回転

 void RGBRotate90_時計回り(BYTE *des,BYTE *src,int幅,int高さ)

{

  if((!des)||(!src))

  {

    戻る;

  }

  int n = 0;

  int linesize = 幅*3;

  int i;

  int j;

  // 時計回りのアルゴリズム

  for(j = 0;j < 幅 ;j++) 

  {

    for(i= 高さ;i>0;i--)

    { 

        memcpy(&des[n],&src[linesize*(i-1)+j*3-3],3);

      n+=3;

    }

  }

}

// YUV420 を 90 度回転

void YUVRotate90(BYTE *des,BYTE *src,int幅,int高さ)

{

  int i=0,j=0,n=0;

  int hw=幅/2,hh=高さ/2;

  for(j=幅;j>0;j--) 

    for(i=0;i<高さ;i++) 

    {

      des[n++] = src[幅*i+j];

    }    

    unsigned char *ptmp = src+幅*高さ;

    for(j=hw;j>0;j--)

    for(i=0;i<hh;i++) 

    { 

      des[n++] = ptmp[hw*i+j];

    }

    

    ptmp = src+幅*高さ*5/4;

    for(j=hw;j>0;j--)

    for(i=0;i<hh;i++) 

    {

      des[n++] = ptmp[hw*i+j];

    }     

}

おすすめ

転載: blog.csdn.net/qq_21743659/article/details/130628152