Просто отрегулируйте значение масштаба в событии MouseWheel (), затем ScaleTransform () поверхность GRAPHICS (не сам Path) в событии Paint () и нарисуйте:
public partial class Form1 : Form
{
private GraphicsPath path = new GraphicsPath();
private float scale = 1.0F;
public Form1()
{
InitializeComponent();
path.AddRectangle(new Rectangle(10, 10, 50, 100));
pictureBox1.MouseWheel += PictureBox1_MouseWheel;
pictureBox1.Paint += pictureBox1_Paint;
}
private void PictureBox1_MouseWheel(object sender, MouseEventArgs e)
{
scale = Math.Max(scale + Math.Sign(e.Delta) * 0.1F, 0.1F);
pictureBox1.Invalidate();
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.ScaleTransform(scale, scale);
e.Graphics.DrawPath(Pens.Red, path);
}
}
-- РЕДАКТИРОВАТЬ ---
Это масштабируется целиком, не могли бы вы показать мне, как масштабировать только объект графического контура и верхний, левый должны быть исправлены, то есть без масштабирования верхней, левой точки?
В этом случае переведите курсор в верхнюю левую точку вашего прямоугольника, масштабируйте, а затем верните обратно в начало координат.Теперь нарисуйте НЕИЗМЕНЕННЫЙ прямоугольник:
private void PictureBox1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.TranslateTransform(10, 10);
e.Graphics.ScaleTransform(scale, scale);
e.Graphics.TranslateTransform(-10, -10);
e.Graphics.DrawPath(Pens.Red, path);
}
Если у вас есть другие элементы, которые рисуются в разных позициях и / или масштабах, то вы можете сбросить графическую поверхность до и после (каждый «элемент» может сделатьвещи того же типа, чтобы позиционировать и масштабировать себя):
private void PictureBox1_Paint(object sender, PaintEventArgs e)
{
// possibly other drawing operations
e.Graphics.ResetTransform();
e.Graphics.TranslateTransform(10, 10);
e.Graphics.ScaleTransform(scale, scale);
e.Graphics.TranslateTransform(-10, -10);
e.Graphics.DrawPath(Pens.Red, path);
e.Graphics.ResetTransform();
// possibly other drawing operations
}
Этот подход хорош, поскольку он сохраняет исходную информацию о вашем прямоугольнике;изменение просто визуально.