将绘制的线条保存为对象
本文关键字:保存 对象 绘制 | 更新日期: 2023-09-27 18:02:13
是否有可能保存我用图形创建的东西?例如:
Graphics g = PanelOne.CreateGraphics();
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
g.DrawLine(p, beginn, end);
是否可以将整行保存为Object?
的原因是,我需要编程一个非常基本的Drawtool,这应该有一个"撤消"功能。目前,我将点保存在一个数组中,如果用户按下反斜杠键,就会透支它们,但是性能非常慢,它会抖动。
我可能还想添加拖放线条的可能性,如果将线条保存在对象中,这将容易得多。
您可以这样做,但是您应该在Paint
方法中绘制所有对象:
public abstract class DrawingObject
{
public abstract void Draw(Graphics g);
}
public class Line : DrawingObject
{
public Point Start { get; set; }
public Point End { get; set; }
public float Thickness { get; set; }
public Color Color { get; set; }
public override void Draw(Graphics g)
{
g.DrawLine(new Pen(Color, Thickness), Start, End);
}
}
// Other classes derived from `DrawingObject`
在表单中存储DrawingObjects
列表,并在需要时绘制它们:
public partial class MainForm : Form
{
//...
List<DrawingObject> _objects = new List<DrawingObject>();
private void PanelOne_Paint(object sender, PaintEventArgs e)
{
base.OnPaint(e);
foreach (var o in _objects)
{
o.Draw(e.Graphics);
}
}
}
调用panel的Invalidate()
方法,当任何变化发生在你的对象(新线,删除一条线,移动一条线,等)。
为了避免绘图时闪烁,可以将面板的DoubleBuffer
属性设置为true
。