鳕鱼天空

This is Mr Wang's Tech Blog.

c# 图片围绕圆心旋转

public Image RotateImg(Image b, int angle)
        {
            //原图的宽和高
            int w = b.Width;
            int h = b.Height;
 
            int squartWidth = Math.Max(w, h) * 3;//目标图边长
            int radius = (squartWidth - 1) / 2;//圆半径
            //目标位图
            Bitmap dsImage = new Bitmap(squartWidth, squartWidth);
            System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(dsImage);
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear;
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            Pen pen = new Pen(Color.Black,1)   ;
            g.DrawEllipse(pen, 0, 0, squartWidth - 1, squartWidth - 1);//画个圆圈用于确认功能是否正确
            
            angle = angle % 360;
            g.TranslateTransform(radius, radius);
            g.RotateTransform(360 - angle);
            g.TranslateTransform(-radius, -radius);
            g.DrawImage(b, radius - w / 2, radius - h * 2);//平面几何这个算不来了,所以直接写死了
 
            ////重至绘图的所有变换
            g.ResetTransform();
            g.Save();
            g.Dispose();
 
            ////保存旋转后的图片
            b.Dispose();
            return dsImage;
 
        }
 
        int number = 0;
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            var img = this.RotateImg(Resources._1, 10 * (number++));
            this.pictureBox1.Image = img;
        }

添加评论

Loading