C语言实现图像旋转

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;
}

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值