Panel Drawing zoom in C#

青春壹個敷衍的年華 提交于 2019-12-01 21:13:47

Here is a way to scale the drawing by scaling the Graphics object:

private void panel1_Paint(object sender, PaintEventArgs e)
{
    Graphics g = e.Graphics;
    g.ScaleTransform(zoom, zoom);

    // some demo drawing:
    Rectangle rect = panel1.ClientRectangle;
    g.DrawEllipse(Pens.Firebrick, rect);
    using (Pen pen = new Pen(Color.DarkBlue, 4f)) g.DrawLine(pen, 22, 22, 88, 88);

}

Here we store the zoom level:

float zoom = 1f;

Here we set it and update the Panel:

private void trackBar1_Scroll(object sender, EventArgs e)
{
   // for zooming between, say 5% - 500%
   // let the value go from 50-50000, and initialize to 100 !
    zoom = trackBar1.Value / 100f;  
    panel1.Invalidate();
}

Two example screenshots:

Note how nicely this scales the Pen widths as well. Turning on antialiasing would be a good idea..: g.SmoothingMode = SmoothingMode.AntiAlias;

Marlon

Since you're drawing from scratch, couldn't you resize you drawing base on zoom factor?

You could multiply your drawing dimensions by your zoom factor. Assuming your zoom factor would be:

  • 0.5 for 50 % zoom (which would reduce the drawing size)
  • 1.0 for 100% (Real size)
  • 1.5 for 150 % (bigger size), you could calc the width this way:
object.Width = originalWidth * zoomFactor;
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!