ZOOM-IN& ZOOM-OUT 2D图形C#

时间:2018-01-10 10:57:14

标签: c# .net winforms graphics

我必须ZOOM-IN&我在winform上绘制的2D图形的ZOOM-OUT特定部分,如(直线,矩形,圆形)。 我没有使用任何图片框,面板。 我创建了简单的程序来绘制圆圈和圆圈。按钮单击尝试缩放 但它显示错误"参数无效" 在方法Drawing()@ Line- DeviceContexct.Transform = mainViewTransform;

public Graphics DeviceContexct;
  public Matrix mainViewTransform = new Matrix();

    private void ScalingCircle_Paint( object sender, PaintEventArgs e )
            {
                Pen myPen = new Pen(Color.Blue, 1); 
                e.Graphics.DrawRectangle(myPen, 50, 50, 100, 100);           
                mainViewTransform.Scale(3, 2);
                DeviceContexct = e.Graphics;
            }
     private void Drawing(Graphics gr)
            {
                Pen myPen2 = new Pen(Color.Red, 1);
                DeviceContexct.Transform = mainViewTransform;
                DeviceContexct.DrawRectangle(myPen2, 50, 50, 100, 100);
            }
       private void button1_Click( object sender, EventArgs e )
            {
                Drawing(DeviceContexct);         

            }

3 个答案:

答案 0 :(得分:0)

我更喜欢使用System.Drawing.Graphics对象绘制到Bitmaps中。 然后你可以使用带有“go.DrawImage(...)”的图形对象将位图直接绘制到你的winforms中并实际给它一个比例。

https://msdn.microsoft.com/en-us//library/ms142040(v=vs.110).aspx

答案 1 :(得分:0)

我得到了解决方案,谢谢你的帮助。

我只需要在按钮点击时调用刷新/无效等。

public partial class ScalingCircle : Form
{
    public Graphics DeviceContexct;
    // current transformation matrix of main view (offset & scaling)
    public Matrix mainViewTransform = new Matrix();

    public int scale = 1;

    public ScalingCircle()
    {
        InitializeComponent();
        DeviceContexct = Graphics.FromHwnd(this.Handle);
        DeviceContexct = this.CreateGraphics();
    }

    public void ScalingCircle_Paint(object sender, PaintEventArgs e)
    {
        DeviceContexct = e.Graphics;
        DeviceContexct.PageUnit = GraphicsUnit.Pixel;
        DeviceContexct.Transform = mainViewTransform;
        ScalingCircle1(scale);
    }

    private void ScalingCircle1(int x )
    {
        Pen myPen2 = new Pen(Color.Black, 1);
        DeviceContexct.Transform = mainViewTransform;

        Rectangle myRectangle = new Rectangle(50, 50, 100 * x, 100 * x);
        DeviceContexct.FillRectangle(new SolidBrush(Color.BurlyWood), myRectangle);
    }

    private void ScalingCircle_Load( object sender, EventArgs e )
    {
        this.ResizeRedraw = true;
      }

    private void button1_Click( object sender, EventArgs e )
    {
        scale += 5;
        this.Refresh();
    }

    private void button2_Click( object sender, EventArgs e )
    {
        if (scale > 1)
        {
            scale -= 5;
            this.Refresh();
        }
    }
}

答案 2 :(得分:-2)

您可以使用转换。用于绘制事物的图形对象具有System.Drawing.Drawing2D.Matrix类型的Transformation属性。 Graphics也有ScaleTransform方法。

我自己没有使用它,但这就是microsofts Chart的用法。

https://msdn.microsoft.com/de-de/library/system.drawing.drawing2d.matrix(v=vs.110).aspx https://msdn.microsoft.com/de-de/library/system.drawing.graphics.scaletransform(v=vs.110).aspx