Winform以任意角度旋转PictureBox中的图片的方法

Posted Will Shine

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Winform以任意角度旋转PictureBox中的图片的方法相关的知识,希望对你有一定的参考价值。

方法1:

  private void RotateFormCenter(PictureBox pb, float angle)
  {
            Image img = pb.Image;
            int newWidth = Math.Max(img.Height, img.Width);
            Bitmap bmp = new Bitmap(newWidth, newWidth);
            Graphics g = Graphics.FromImage(bmp);
            Matrix x = new Matrix();
            PointF point = new PointF(img.Width / 2f, img.Height / 2f);
            x.RotateAt(angle, point);
            g.Transform = x;
            g.DrawImage(img, 0, 0);
            g.Dispose();
            img = bmp;
            pb.Image = img;
  }

  该方法通过将图片转化为用于几何变换的3x3矩阵 对图片进行旋转。

  缺点:有时图片会越转越模糊。

 

方法2:

private void RotateFormCenter(PictureBox pb, float angle)
{
            Graphics graphics = pb.CreateGraphics();
            graphics.Clear(pb.BackColor);
            //装入图片
            Bitmap image = new Bitmap(pb.Image);
            //获取当前窗口的中心点
            Rectangle rect = new Rectangle(0, 0, pb.Width, pb.Height);
            PointF center = new PointF(rect.Width / 2, rect.Height / 2);
            float offsetX = 0;
            float offsetY = 0;
            offsetX = center.X - image.Width / 2;
            offsetY = center.Y - image.Height / 2;
            //构造图片显示区域:让图片的中心点与窗口的中心点一致
            RectangleF picRect = new RectangleF(offsetX, offsetY, image.Width, image.Height);
            PointF Pcenter = new PointF(picRect.X + picRect.Width / 2,
                picRect.Y + picRect.Height / 2);
            // 绘图平面以图片的中心点旋转
            graphics.TranslateTransform(Pcenter.X, Pcenter.Y);
            graphics.RotateTransform(angle);
            //恢复绘图平面在水平和垂直方向的平移
            graphics.TranslateTransform(-Pcenter.X, -Pcenter.Y);
            //绘制图片
            graphics.DrawImage(image, picRect);
}

通过操作Graphics进行图像旋转,使用时需要注意图片是按原始大小进行居中旋转  PictureBox的SizeMode属性对这种方法无效。

以上是关于Winform以任意角度旋转PictureBox中的图片的方法的主要内容,如果未能解决你的问题,请参考以下文章

winform打开图片为啥会旋转90

C#Winform里怎么让控件旋转啊。。。Panel啥的。怎么让他旋转一定的角度。

C#WinForm中,用于将图片以二进制存入sql数据库中,并将图片从数据库中取出,显示在PictureBox控件中。

winform 如何实现鼠标位置获取picturebox的焦点,然后焦点放大

c# winform 关于绘图的问题,如何定义一个Graphics g作为全局变量

c# winform如何取得一个区域的所有控件对象