//绘制图形的过程
private void panel2_MouseMove(object sender, MouseEventArgs e)
{
if (this.MyImg == null)
return;
Graphics g = this.panel2.CreateGraphics();
if (isDrawing)
{
switch (DrawMode)
{
case DrawModes.None:
break;
case DrawModes.Pen:
//从上一个点到当前点绘制线段
g.DrawLine(new Pen(foreColor, 1), MouseOldPoint, new Point(e.X, e.Y));
graphics.DrawLine(new Pen(foreColor, 1), MouseOldPoint, new Point(e.X, e.Y));
MouseOldPoint.X = e.X;
MouseOldPoint.Y = e.Y;
break;
case DrawModes.Line:
//首先恢复此次操作之前的图像,然后再添加Line
panel2_Paint(this, new PaintEventArgs(this.panel2.CreateGraphics(), this.panel2.ClientRectangle));
g.DrawLine(new Pen(foreColor, 1), MouseStartPoint, new Point(e.X, e.Y));
break;
case DrawModes.Ellipse:
//首先恢复此次操作之前的图像,然后再添加Ellipse
panel2_Paint(this, new PaintEventArgs(this.panel2.CreateGraphics(), this.panel2.ClientRectangle));
g.DrawEllipse(new Pen(foreColor, 1), MouseStartPoint.X, MouseStartPoint.Y, e.X - MouseStartPoint.X, e.Y - MouseStartPoint.Y);
break;
case DrawModes.Rectangle:
//首先恢复此次操作之前的图像,然后再添加Rectangle
panel2_Paint(this, new PaintEventArgs(this.panel2.CreateGraphics(), this.panel2.ClientRectangle));
g.DrawRectangle(new Pen(foreColor, 1), MouseStartPoint.X, MouseStartPoint.Y, e.X - MouseStartPoint.X, e.Y - MouseStartPoint.Y);
break;
case DrawModes.Rubber:
//用背景色绘制宽线段
g.DrawLine(new Pen(backColor, 20), MouseOldPoint, new Point(e.X, e.Y));
graphics.DrawLine(new Pen(backColor, 20), MouseOldPoint, new Point(e.X, e.Y));
MouseOldPoint.X = e.X;
MouseOldPoint.Y = e.Y;
break;
}
}
}
这里只贴出核心代码,需要的朋友可以下载示例看看