DrawLines(pen, points):一次繪製多段連線,**相鄰線段端點自動連接處理**(斜接、圓滑、斜切),粗線條或放大時無縫隙。DrawLine:各段獨立繪製,**端點無連接處理**,粗線條會露出明顯缺口。結論:繪製多段連續線條**必須用 DrawLines**。
public Bitmap CreateBitmap() {
Rectangle bounds = this.Bounds;
Bitmap bmp = new Bitmap(bounds.Width, bounds.Height);
using (Graphics g = Graphics.FromImage(bmp)) {
g.TranslateTransform(-bounds.Left, -bounds.Top); // 原點對齊
Draw(g, bounds); // 復用既有繪製邏輯
}
return bmp;
}
通用性:此模式適用於 **WinForms、ASP.NET、Console、Windows Service** 任何專案類型——**圖形程式不限於桌面應用**。
public void Save(XmlWriter writer) {
XmlSerializer ser = new XmlSerializer(this.GetType());
ser.Serialize(writer, this); // 一鍵物件圖 → XML
}
System.Xml.Serialization。XmlSerializer 需要類別為 **public、具無參建構子、屬性可讀寫**。ser.Deserialize(reader)。public void Draw(Graphics g, Rectangle clipRect) {
using (Pen pen = new Pen(Color, LineWidth)) {
foreach (var line in Lines)
if (clipRect.IntersectsWith(line.Bounds)) // 剪切優化
g.DrawLines(pen, line.ToArray()); // 關鍵:DrawLines
}
}
PointArrayList.ToArray() 輸出 Point[] 供 DrawLines 使用。