是否可以在其定义的中途旋转图纸?

时间:2015-02-28 10:50:35

标签: c# drawing rotatetransform

我正在做一些重复的抽奖,每个抽奖都需要很多工作。 我需要做的是将绘图的一半旋转到它的定义,如下所示:

 using (Graphics g = Graphics.FromImage(bmp))
        {
            //define area do pictureBox e preenche a branco
            Brush brush = new SolidBrush(Color.White);
            Rectangle area = new Rectangle(0, 0, 520, 520);
            g.FillRectangle(brush, area);

           //rotate
           g.RotateTransform(some angle, some reference point)

           //draw some more lines on the top of the rotated previous ones.
}

我尝试使用g.RotateTransform(90),因为Winforms中有该功能,但它没有改变任何东西。为什么?

任何提示?

编辑:如果有帮助,我只需要旋转固定角度,180º

3 个答案:

答案 0 :(得分:1)

RotateTransform肯定会更改后续绘图。

请注意,您通常需要TranslateTransform才能设置旋转点。但它' 它没有改变任何东西'肯定是错的。再试一次!是的,你可以在任何点旋转(或缩放或移动)并移动/转回它或完全重置Graphics对象。

是的,了解MatrixMultiplyTransform也非常有帮助。

但是:您需要了解Graphics对象不包含任何图形,这是一种常见的误解!它是对<{1}}上的绘图的工具,通常是Bitmap的表面。所以旋转发生,但仅适用于您在之后绘制的内容:

Control

enter image description here

答案 1 :(得分:1)

试试这个: 使用这些参考:

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

我制作了Windows应用程序并放在form1 picturebox上,然后这是form_load中的代码:

       //Load an image in from a file
       Bitmap pImage = new Bitmap(Environment.CurrentDirectory + @"\Image.bmp", true);

       //Set our picture box to that image
       pictureBox1.Image = (Bitmap)pImage.Clone();

       //Store our old image so we can delete it
       Image oldImage = pictureBox1.Image;

       //Pass in our original image and return a new image rotated 35 degrees right
       pictureBox1.Image = RotateImage(pImage, 270);
       if (oldImage != null)
       {
           oldImage.Dispose();
       } 

然后使用图像参数和旋转角度制作静态函数返回旋转后的图像,并如前所述从form_load调用它:

            if (image == null)
        {
            throw new ArgumentNullException("image");
        }
        else
        {
            //create a new empty bitmap to hold rotated image
            Bitmap rotatedBmp = new Bitmap(image.Width, image.Height);

            rotatedBmp.SetResolution(image.HorizontalResolution, image.VerticalResolution);

            //make a graphics object from the empty bitmap
            Graphics g = Graphics.FromImage(rotatedBmp);


            //move rotation point to center of image
            g.TranslateTransform((float)image.Width / 2, (float)image.Height / 2);

            //rotate
            g.RotateTransform(angle);

            //move image back
            g.TranslateTransform(-(float)image.Width / 2, -(float)image.Height / 2);

            //draw passed in image onto graphics object
            g.DrawImage(image, new PointF(0, 0));

            return rotatedBmp;
        }

答案 2 :(得分:0)

你也可以直接使用form_load中的代码,使用就绪的RotateFlipType(枚举类型),但是它具有固定的角度,如90,270,....但是前面的方法可以使用任何整数值来旋转图像:

        private void Form1_Load(object sender, EventArgs e)
    {
        //Load an image in from a file
       Bitmap pImage = new Bitmap(Environment.CurrentDirectory + @"\Image.bmp", true);
       pImage.RotateFlip(RotateFlipType.Rotate90FlipXY);
       pictureBox1.Image = pImage;
    }