C# Graphics 繪製自定義圖形

在 Graphics 類別中我們可以直接使用 DrawRectangle, DrawEllipse 等 Draw 開頭的方法繪製空心圖案,和使用 FillRectangle, FillEllipse 等 Fill 開頭的方法繪製填充圖形,那假設要繪製自定義圖形呢?

其實我們可以使用 GraphicsPath,將該圖形的所有邊、弧線定義好,再直接畫上去即可!

例如筆者要繪製積木的「拱橋」形狀:
    
        this.Paint += (s, e) =>
        {
            var graphics = e.Graphics;
            var graphicsPath = new System.Drawing.Drawing2D.GraphicsPath();

            graphicsPath.AddLines(new Point[]
            {
                new Point(200, 350),
                new Point(100, 350),
                new Point(100, 100),
                new Point(600, 100),
                new Point(600, 350),
                new Point(500, 350),
            });
            graphicsPath.AddArc(200, 200, 300, 300, 0, -180);

            // graphics.DrawPath(Pens.Coral, graphicsPath); // 繪製圖形
            graphics.FillPath(Brushes.Coral, graphicsPath); // 繪製並填滿圖形
        };
        
    

執行結果:

另外如果要把結束的點和起始點接在一起可以使用下面這行:
  
graphicsPath.CloseFigure();


CloseFigure 只對 DrawPath 有效,因為如果是 FillPath 的話如果判斷不是封閉圖形時會自動把頭尾座標連起來,不然開放區域沒有辦法「填滿」。

延伸閱讀:
C# Graphics 繪製扇形、弧線

留言