c#窗体如何让picturebox旋转

如题所述

PictureBox旋转99.9%的人都搞不了的!

应该旋转的是图片

如果不是随意角度,直接用这个方法:pictureBox.Image.RotateFlip()

任意角度的话可参考下这个片断:

    public static class ImageEx

    {

        public static Image GetRotateImage(this Image img, float angle)

        {

            angle = angle % 360;//弧度转换

            double radian = angle * Math.PI / 180.0;

            double cos = Math.Cos(radian);

            double sin = Math.Sin(radian);

            //原图的宽和高

            int w = img.Width;

            int h = img.Height;

            int W = (int)(Math.Max(Math.Abs(w * cos - h * sin), Math.Abs(w * cos + h * sin)));

            int H = (int)(Math.Max(Math.Abs(w * sin - h * cos), Math.Abs(w * sin + h * cos)));

            //目标位图

            Image dsImage = new Bitmap(W, H, img.PixelFormat);

            using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(dsImage))

            {

                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear;

                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

                //计算偏移量

                Point Offset = new Point((W - w) / 2, (H - h) / 2);

                //构造图像显示区域:让图像的中心与窗口的中心点一致

                Rectangle rect = new Rectangle(Offset.X, Offset.Y, w, h);

                Point center = new Point(rect.X + rect.Width / 2, rect.Y + rect.Height / 2);

                g.TranslateTransform(center.X, center.Y);

                g.RotateTransform(360 - angle);

                //恢复图像在水平和垂直方向的平移

                g.TranslateTransform(-center.X, -center.Y);

                g.DrawImage(img, rect);

                //重至绘图的所有变换

                g.ResetTransform();

                g.Save();

            }

            return dsImage;

        }

}

   

 PS:在有上面代码后,旋转30度可以这样写:pictureBox.Image=img.GetRotateImage(30);

注意:Image用后请手动释放pictureBox.Image.Dispose();否则图片大些的话,转转下内存就猛升了(一点经验,敬请笑纳)。

补充:C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司 .NET windows网络框架的主角。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-11-26

PictureBox旋转99.9%的人都搞不了的!

你应该旋转的是图片

如果不是随意角度,直接用这个方法:pictureBox.Image.RotateFlip()

任意角度的话可参考下这个片断:

    public static class ImageEx
    {
        public static Image GetRotateImage(this Image img, float angle)
        {
            angle = angle % 360;//弧度转换
            double radian = angle * Math.PI / 180.0;
            double cos = Math.Cos(radian);
            double sin = Math.Sin(radian);
            //原图的宽和高
            int w = img.Width;
            int h = img.Height;
            int W = (int)(Math.Max(Math.Abs(w * cos - h * sin), Math.Abs(w * cos + h * sin)));
            int H = (int)(Math.Max(Math.Abs(w * sin - h * cos), Math.Abs(w * sin + h * cos)));
            //目标位图
            Image dsImage = new Bitmap(W, H, img.PixelFormat);
            using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(dsImage))
            {
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear;
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                //计算偏移量
                Point Offset = new Point((W - w) / 2, (H - h) / 2);
                //构造图像显示区域:让图像的中心与窗口的中心点一致
                Rectangle rect = new Rectangle(Offset.X, Offset.Y, w, h);
                Point center = new Point(rect.X + rect.Width / 2, rect.Y + rect.Height / 2);
                g.TranslateTransform(center.X, center.Y);
                g.RotateTransform(360 - angle);
                //恢复图像在水平和垂直方向的平移
                g.TranslateTransform(-center.X, -center.Y);
                g.DrawImage(img, rect);
                //重至绘图的所有变换
                g.ResetTransform();
                g.Save();
            }
            return dsImage;
        }
}

 PS:在有上面代码后,旋转30度可以这样写:pictureBox.Image=img.GetRotateImage(30);

注意:Image用后请手动释放pictureBox.Image.Dispose();否则图片大些的话,转转下内存就猛升了(一点经验,敬请笑纳)。

本回答被提问者和网友采纳

c#窗口运用程序中添加了一个picture控件怎样让它从左运动到右?_百度知 ...
在 C# 窗口应用程序中,让一个 PictureBox 控件从左到右运动可以通过编写代码来实现。以下是一种实现方式:在窗口中添加一个 PictureBox 控件,并设置其初始位置在窗口左侧。在窗口的 Form_Load 事件处理程序中,创建一个计时器(Timer),并将其启动。这个计时器将用于不断更新 PictureBox 的位置。在...

如何让C#中的picturebox方块旋转起来(让他倾斜)
} private void button1_Click(object sender, EventArgs e) { Image img = Image.FromFile(@"D:

C#winform中如何让pictureBox控件旋转一定的角度
简单点的可以用GDI旋转pictureBox显示的图片.正途: 想旋转pictureBox 那就自己写自定义的的pictureBox控件 然后可以设置旋转属性...实现呢 是通过重绘...画边框神马的 画显示的图片...等等等...

C#图片怎么翻转
“private void Form_XX_Load(object sender, EventArgs e)”函数中添加: “pictureBox1.Image.RotateFlip(RotateFlipType.Rotate180FlipX);pictureBox1.Refresh();”这两句就行了。

c#windows 应用程序picturebox形状怎样变成圆形
只要设置Picturebox的Region属性就可以了,如下 using System.Drawing.Drawing2D;private void button1_Click(object sender, EventArgs e){ GraphicsPath gp = new GraphicsPath();gp.AddEllipse(pictureBox1.ClientRectangle);Region region = new Region(gp);pictureBox1.Region = region;gp.Dispose();r...

C#窗体放进一个图片,怎么让它移动起来?
First : Create a PictureBox Control PictrueBox picBox = new PictrueBox();Then : Import image to 'picBox'picBox.Image = new Bitmap(File.Open("..File Path.."));Last : Use a Timer to Control the Location of 'picBox'var picTimer = new System.Windows.Forms.Timer{Interval = ...

C#picturebox中的图像怎么能随着窗体的大小而改变
首先设置PictureBox的SizeMode属性为StretchImage或者Zoom,然后在Form的sizeChange事件中,改变PictureBox的大小 就可以实现你的要求

用C#编写图片如何旋转
\/*任意角度旋转,但图片本生并不旋转,显示时候是旋转*\/ int Angle=30;\/\/Angle为旋转的角度 Graphics g = picturebox1.CreateGraphics();TextureBrush mybrush = new TextureBrush(SrcBmp);\/\/SrcBmp为原图 mybrush.RotateTransform(Angle);\/\/旋转 g.FillRectangle(mybrush, 0, 0,Picturebox1.Width...

C#picturebox如何让图片运动啊?
X或location.Y属性就OK了。比如下面的代码会让图片向左移动 (没有用时钟,不是推荐的方法,仅仅是演示原理)point p=new point(10,10);for(int i=0;i<=10;i++){ p.x+=2;你的图片.location=p;System.Threading.Thread.Sleep(100); \/\/休息0.1秒,这样是为了看到效果,否则一闪就结束了 } ...

用c#将图像旋转180度,90度
使用RotateFlip方法,具体参看MSDN Bitmap bitmap1;private void InitializeBitmap(){ try { bitmap1 = (Bitmap)Bitmap.FromFile(@"C:\\Documents and Settings\\" + "All Users\\Documents\\My Music\\music.bmp");PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;PictureBox1.Image = bitmap1;}...

相似回答