typedef struct imginfo{
int width;
int height;
unsigned char* img;
} imginfo;
int imrotate(const imginfo img,unsigned char *res,int Angle){
int i,j,k;
unsigned char arr[img.height*img.width];
memcpy(arr,img.img,sizeof(arr));
memset(res,0,sizeof(arr));
int width=img.width;
int height=img.height;
int after_width=width ;
int after_height=height ;
printf("width=%d,height=%d \r\n",width,height);
double angle;
int Rot_step=0;
int step=0;
int midX_pre,midY_pre,midX_after,midY_after;
midX_pre=width/2;
midY_pre=height/2;
int pre_i,pre_j,after_i,after_j;
angle=1.0*Angle*PI/180;
midX_after=after_width/2;
midY_after=after_height/2;
step=width;
Rot_step=width;
for(i=0;i<width;i++){
for(j=0;j<height;j++){
after_i=i-midX_after;
after_j=j-midY_after;
pre_i = (int)(cos((double)angle) * after_i - sin((double)angle) * after_j) + midX_pre;
pre_j = (int)(sin((double)angle) * after_i + cos((double)angle) * after_j) + midY_pre;
if(pre_i>=0&&pre_i<width&&pre_j>=0&&pre_j<height){
*(res+i+j*step)=*(arr+pre_i+pre_j*step);
}
}
}
return 0;
}
更多推荐
C语言实现图像旋转
发布评论