//反時計回りに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];
}
}