使用 Pen 繪製帶箭頭的直線時,預設箭頭大小隨線寬縮放,常導致:
System.Drawing.Drawing2D.AdjustableArrowCap 類別允許獨立控制箭頭尺寸,完美解決此問題。
using System.Drawing;
using System.Drawing.Drawing2D;
// 建立可調整箭頭:寬度 6、高度 6、isFilled=true (實心箭頭)
var arrowCap = new AdjustableArrowCap(6, 6, true);
// 建立畫筆:紅色、寬度 2
using (var pen = new Pen(Color.Red, 2))
{
// 關鍵:指定 CustomEndCap 為自訂箭頭
pen.CustomEndCap = arrowCap;
// 繪製直線(起點 10,10 → 終點 200,100)
graphics.DrawLine(pen, 10, 10, 200, 100);
}
| 參數 | 類型 | 含義 |
|---|---|---|
| width | float | 箭頭底邊寬度(垂直於線條方向) |
| height | float | 箭頭長度(沿線條方向) |
| isFilled | bool | true = 實心填充;false = 僅繪製輪廓 |
| middleInset | float (可選) | 箭頭中間凹陷程度,預設 0,值越大凹陷越明顯 |
private void Form1_Paint(object sender, PaintEventArgs e)
{
using (var pen = new Pen(Color.Blue, 3))
{
// 箭頭:寬 10、高 12、實心、中間微凹
pen.CustomEndCap = new AdjustableArrowCap(10, 12, true, 2f);
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; // 抗鋸齒
e.Graphics.DrawLine(pen, 50, 50, 300, 200);
}
}
同時設定 CustomStartCap 與 CustomEndCap 即可繪製雙向箭頭:
pen.CustomStartCap = new AdjustableArrowCap(8, 8, true);
pen.CustomEndCap = new AdjustableArrowCap(8, 8, true);
AdjustableArrowCap 讓箭頭尺寸與線寬解耦,配合 Pen.CustomStartCap/EndCap,輕鬆實現專業級技術繪圖效果。記得在 using 區塊或手動 Dispose() 釋放 Pen 與 Graphics 資源。