int YUV420PRotate90(unsigned char* indata, unsigned char* outdata, int width, int height)
{
int iSum = width*height;
int k=0;
for ( int i=width; i>0; i-- ) {
for ( int j=iSum; j>0; j-=width ) {
outdata[k] = indata[j-i];
k++;
}
}
width /= 2;
height /= 2;
int iSumu=width*height;
for ( int i=width; i>0; i-- ) {
for ( int j=iSumu; j>0; j-=width ) {
outdata[k] = indata[iSum+j-i];
k++;
}
}
iSum += width*height;
int iSumv=width*height;
for ( int i=width; i>0; i-- ) {
for ( int j=iSumv; j>0; j-=width ) {
outdata[k] = indata[iSum+j-i];
k++;
}
}
return 0;
}
int YUV420PRotate180(unsigned char* indata, unsigned char* outdata, int width, int height)
{
int iSum = width*height;
int k=0;
for ( int i=iSum-1; i>=0; i-- ) {
outdata[k] = indata[i];
k++;
}
width /= 2;
height /= 2;
int iSumu=width*height;
for ( int i=iSum+iSumu-1; i>=iSum; i-- ) {
outdata[k] = indata[i];
k++;
}
iSum += width*height;
int iSumv=width*height;
for ( int i=iSum+iSumv-1; i>=iSum; i-- ) {
outdata[k] = indata[i];
k++;
}
return 0;
}
int YUV420PRotate270(unsigned char* indata, unsigned char* outdata, int width, int height)
{
int iSum = width*height;
int k=0;
for ( int i=1; i<=width; i++ ) {
for ( int j=width; j<=iSum; j+=width ) {
outdata[k] = indata[j-i];
k++;
}
}
width /= 2;
height /= 2;
int iSumu=width*height;
for ( int i=1; i<=width; i++ ) {
for ( int j=width; j<=iSumu; j+=width ) {
outdata[k] = indata[iSum+j-i];
k++;
}
}
iSum += width*height;
int iSumv=width*height;
for ( int i=1; i<=width; i++ ) {
for ( int j=width; j<=iSumv; j+=width ) {
outdata[k] = indata[iSum+j-i];
k++;
}
}
return 0;
}
YUV420图像旋转算法的优化
最新推荐文章于 2023-03-14 16:27:53 发布