保留笔大小

  • 本文关键字:保留 c# graphics
  • 更新时间 :
  • 英文 :


所以我正在制作一个绘画应用程序,我想知道如何保留我绘制的线条的粗细。因此,我的应用程序使用绘制的所有线条的点列表列表,并在用户每次绘制新线时再次绘制它们。现在我有一个问题,当我改变笔的大小时,所有线条的大小都会改变,因为它们都被重新绘制了。

我的代码:

        //Create new pen
        Pen p = new Pen(Color.Black, penSize);
        //Set linecaps for start and end to round
        p.StartCap = LineCap.Round;
        p.EndCap = LineCap.Round;
        //Turn on AntiAlias
        e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
        //For each list of line coords, draw all lines
        foreach (List<Point> lstP in previousPoints)
        { 
            e.Graphics.DrawLine(p, lstP[0], lstP[1]);
        }
        p.Dispose();

我知道可以使用 Pen.Width(( 在循环期间更改笔的大小,但我如何保留线宽?

而不是List<List<Point>>,编写一个具有List<Point>和笔宽的类,并使用其列表。我们也会加入颜色,但你可以省略它。

public class MyPointList {
    public List<Point> Points { get; set; }
    public float PenWidth { get; set; }
    public Color Color { get; set; }
}

将"上一个点"作为这些列表:

private List<MyPointList> previousPoints;

并循环:

foreach (MyPointList lstP in previousPoints) {
    using (var p = new Pen(lstP.Color, lstP.PenWidth)) {
        e.Graphics.DrawLine(p, lstP.Points[0], lstP.Points[1]);
    }
}

using块处理笔。

正如凯尔在评论中指出的那样,你也可以给MyPointList一个绘图的方法。

实际上,您可以使用抽象或虚拟Draw(Graphics g)方法编写基类:

public abstract class MyDrawingThing {
    public abstract void Draw(Graphics g);
}
public class MyPointList : MyDrawingThing {
    public List<Point> Points { get; set; }
    public float PenWidth { get; set; }
    public Color Color { get; set; }
    public override void Draw(Graphics g) {
        using (var p = new Pen(Color, PenWidth)) {
            g.DrawLine(p, Points[0], Points[1]);
        }
    }
}

。并像这样使用:

private List<MyDrawingThing> previousPoints;
foreach (MyDrawingThing thing in previousPoints) {
    thing.Draw(e.Graphics);
}

写十几个不同的子类,画圆圈,弧线,棒棒猫,等等。

相关内容

  • 没有找到相关文章