您當前的位置:首頁 > 舞蹈

純C影象旋轉90、180、270度

作者:由 liqian99 發表于 舞蹈時間:2020-10-28

純C影象旋轉90、180、270度。

/**

* @desc 灰度影象旋轉90

* @param psrc 原影象

* @param sw 原影象寬度

* @param sh 原影象高度

* @param pdst 目標影象

* @param dw 目標影象寬度

* @param dh 目標影象高度

**/

void imgRotate90Gray(unsigned char *psrc,int sw,int sh,unsigned char *pdst,int *dw,int *dh)

{

int i,j,dw1;

unsigned char *p,*q;

*dw = sh;

*dh = sw;

dw1 = *dw-1;

p = psrc;

q = pdst;

for(i=0;i<(*dh);i++){

for(j=0;j<(*dw);j++){

*q++ = p[(dw1-j)*(*dh)+i];

}

}

}

/**

* @desc 彩色影象旋轉90(RGB888)

* @param psrc 原影象

* @param sw 原影象寬度

* @param sh 原影象高度

* @param pdst 目標影象

* @param dw 目標影象寬度

* @param dh 目標影象高度

**/

void imgRotate90Color(unsigned char *psrc,int sw,int sh,unsigned char *pdst,int *dw,int *dh)

{

int i=0,j=0,bytePerLine,dw1,tmp,i3;

unsigned char *p,*q;

*dw = sh;

*dh = sw;

bytePerLine = *dh*3;

dw1 = *dw-1;

p = psrc;

q = pdst;

for(i=0;i<(*dh);i++){

i3 = i*3;

for(j=0;j<(*dw);j++){

tmp = (dw1-j)*bytePerLine+i3;

*q++ = p[tmp];

*q++ = p[tmp+1];

*q++ = p[tmp+2];

}

}

}

/**

* @desc 灰階影象旋轉270

* @param psrc 原影象

* @param sw 原影象寬度

* @param sh 原影象高度

* @param pdst 目標影象

* @param dw 目標影象寬度

* @param dh 目標影象高度

**/

void imgRotate270Gray(unsigned char *psrc,int sw,int sh,unsigned char *pdst,int *dw,int *dh)

{

int i=0,j=0,tmp,dh1;

unsigned char *p,*q;

*dw = sh;

*dh = sw;

dh1 = sw-1;

p = psrc;

q = pdst;

for(i=0;i<(*dh);i++){

tmp = dh1-i;

for(j=0;j<(*dw);j++){

*q++ = p[j*(*dh)+tmp];

}

}

}

/**

* @desc 彩色影象旋轉270(RGB888)

* @param psrc 原影象

* @param sw 原影象寬度

* @param sh 原影象高度

* @param pdst 目標影象

* @param dw 目標影象寬度

* @param dh 目標影象高度

**/

void imgRotate270Color(unsigned char *psrc,int sw,int sh,unsigned char *pdst,int *dw,int *dh)

{

int i=0,j=0,tmp1 = 0,tmp2=0,dh3,dh31;

unsigned char *p,*q;

*dw = sh;

*dh = sw;

dh3 = sw*3,dh31 = sw*3-1;

p = psrc;

q = pdst;

tmp1 = dh31;

for(i=0;i<(*dh);i++){

tmp1 -= 3;

tmp2 = 0;

for(j=0;j<(*dw);j++){

tmp2+=dh3;

*q++ = p[tmp2+tmp1-2];

*q++ = p[tmp2+tmp1-1];

*q++ = p[tmp2+tmp1];

}

}

}

/**

* @desc 灰階影象旋轉180

* @param pimg 影象

* @param w 影象寬度

* @param h 影象高度

**/

void imgRotate180Gray(unsigned char *pimg,int w,int h)

{

unsigned char tmp;

int i=0,j=0;

unsigned char *t,*tt;

tt = pimg;

t = pimg + (w*h-1);

for(i=0;i<(h>>1);i++){

for(j=0;j

tmp = *tt;

*tt = *t;

*t = tmp;

tt++;

t——;

}

}

//如果影象高度是奇數

int halfH = h>>1;

if(h%2 == 1){

for(i=0;i<(w>>1);i++){

tmp = pimg[halfH*w+i];

pimg[halfH*w+i] = pimg[halfH*w+w-1-i];

pimg[halfH*w+w-1-i] = tmp;

}

}

}

/**

* @desc 彩色影象旋轉180(RGB888)

* @param pimg 影象

* @param w 影象寬度

* @param h 影象高度

**/

void imgRotate180Color(unsigned char *pimg,int w,int h)

{

unsigned char tmp;

int i=0,j=0,m=0,w3;

unsigned char *t,*tt;

w3 = w*3;

tt = pimg;

t = pimg + (w3*h-3);

for(i=0;i<(h>>1);i++){

for(j=0;j

for(m=0;m<3;m++){

tmp = *tt;

*tt = *t;

*t = tmp;

++tt;

++t;

}

t-=6;

}

}

//如果影象高度是奇數

int halfH = h>>1;

halfH*=w3;

if(h%2 == 1){

for(i=0;i<(w3>>1);i+=3){

tmp = pimg[halfH+i];

pimg[halfH+i] = pimg[halfH+w3-3-i];

pimg[halfH+w3-3-i] = tmp;

tmp = pimg[halfH+i+1];

pimg[halfH+i+1] = pimg[halfH+w3-2-i];

pimg[halfH+w3-2-i] = tmp;

tmp = pimg[halfH+i+2];

pimg[halfH+i+2] = pimg[halfH+w3-1-i];

pimg[halfH+w3-1-i] = tmp;

}

}

}

/**

* @desc 彩色影象R、B互換(RGB888)

* @param pimg 影象

* @param w 影象寬度

* @param h 影象高度

**/

void imgRBExchange(unsigned char *pimg,int w,int h)

{

int i = 0,j=0;

unsigned char tmp = 0;

unsigned char *p;

p = pimg;

for (j=0;j

for (i=0;i

tmp = *p;

*p = *(p+2);

*(p+2) = tmp;

p+=3;

}

}

}

標簽: param  int  pimg  影象  unsigned