首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 圖形高級篇:DrawLines 連線優勢、記憶體位圖生成與 XML 序列化(第七講·中)

     編輯:關於C語言

DrawLines vs 多次 DrawLine:端點連接品質

  • DrawLines(pen, points):一次繪製多段連線,**相鄰線段端點自動連接處理**(斜接、圓滑、斜切),粗線條或放大時無縫隙。
  • 多次 DrawLine:各段獨立繪製,**端點無連接處理**,粗線條會露出明顯缺口。

結論:繪製多段連續線條**必須用 DrawLines**。

CreateBitmap:記憶體離屏渲染通用模式

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** 任何專案類型——**圖形程式不限於桌面應用**。

PenMarkInfoDocument:XML 序列化持久化

public void Save(XmlWriter writer) {
    XmlSerializer ser = new XmlSerializer(this.GetType());
    ser.Serialize(writer, this); // 一鍵物件圖 → XML
}
  • 命名空間:System.Xml.Serialization。
  • XmlSerializer 需要類別為 **public、具無參建構子、屬性可讀寫**。
  • 反序列化同理:ser.Deserialize(reader)。

PenMarkInfo.Draw 核心實作

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 使用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved