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

C# 圖形高級篇完結:即時繪圖、測試與部署(第七講·完結篇)

     編輯:關於C語言

即時軌跡繪製:CreateGraphics 繞過重繪機制

簽名軌跡點每秒產生數十次,若走 Invalidate→OnPaint 流程會嚴重卡頓。**解法**:呼叫 Control.CreateGraphics() 取得即時 Graphics(相當於 Win32 GetDC),直接在事件處理中繪製線段,**完全繞過訊息佇列與 OnPaint**,極大提升流暢度。

// OnMouseMove 中
if (Marking) {
    Point viewPt = new Point(e.X, e.Y);
    viewPt.Offset(-AutoScrollPosition.X, -AutoScrollPosition.Y);
    currentLine.Add(viewPt); // 加入視圖座標點

    using (Graphics g = CreateGraphics()) {
        g.TranslateTransform(AutoScrollPosition.X, AutoScrollPosition.Y);
        // 僅繪製最新線段
        g.DrawLine(pen, LastPoint, viewPt);
    }
    LastPoint = viewPt;
}

OnMouseUp:誤觸過濾與軌跡確認

protected override void OnMouseUp(MouseEventArgs e) {
    base.OnMouseUp(e);
    if (Marking && currentLine != null) {
        Rectangle bounds = currentLine.Bounds;
        // 忽略極小軌跡(寬或高 < 5 像素視為誤觸)
        if (bounds.Width > 5 || bounds.Height >= 5)
            currentInfo.Lines.Add(currentLine);
        currentLine = null;
    }
}

同邏輯用於 Windows 雙擊判定:**時間間隔 + 位移距離**雙重門檻過濾誤操作。

測試與部署

  1. 建立 frmTest 表單,工具箱加入 PenMarkControl。
  2. 放置控件與功能按鈕(開始/結束簽名、匯出圖片、載入/儲存 XML)。
  3. 撰寫測試代碼驗證各功能。
  4. 專案屬性改為「類別庫」,建置產出 PenMarkLib.dll 交付。

第七講核心收穫

  • 髒矩形技術:Invalidate(Rectangle) 局部失效,ClipRectangle 精準重繪。
  • 文檔物件模型 (DOM):PointArrayList→PenMarkInfo→PenMarkInfoDocument 三層架構。
  • XML 序列化:XmlSerializer 一鍵物件↔XML。
  • 即時繪圖:CreateGraphics 繞過重繪管線,適用高頻回饋場景。
  • 記憶體圖片生成:Graphics.FromImage(Bitmap) 離屏渲染,適用任何專案類型。

掌握以上技術,已具備開發專業級圖形編輯器的基礎。**下一講將探索 ASP.NET 圖形開發:帶超連結的餅圖**,敬請期待!

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