首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# GDI+ 繪圖:PointF 實現浮點座標精確繪制折線

     編輯:程式設計綜合問答

問題核心

Point 結構體僅支持整數座標,浮點數需使用 PointF 結構體。

正確代碼示例

using System.Drawing;
using System.Drawing.Drawing2D;

// 創建浮點座標點數組
PointF[] points = {
    new PointF(x1, 0),
    new PointF(x1, -y1),
    new PointF(y1, x1 + Width / 4f),
    new PointF(x1 + Width / 4f, 0)
};

// 繪制平滑折線
using (Pen pen = new Pen(Color.Black, 3)) {
    pen.StartCap = LineCap.Round;
    pen.EndCap = LineCap.Round;
    pen.LineJoin = LineJoin.Round;
    
    graphics.SmoothingMode = SmoothingMode.AntiAlias; // 抗鋸齒
    graphics.DrawLines(pen, points);
}

關鍵類型對比

類型命名空間座標類型適用場景
PointSystem.Drawingint X, Y像素級精確定位
PointFSystem.Drawingfloat X, Y浮點精度、縮放變換
Point (WPF)System.Windowsdouble X, YWPF 邏輯座標

重載方法確認

// Graphics 類提供完整重載
public void DrawLines(Pen pen, Point[] points);   // 整數版
public void DrawLines(Pen pen, PointF[] points);  // 浮點版

// 同樣適用於:
// DrawPolygon, DrawCurve, DrawBeziers, FillPolygon 等

精度陷阱避坑

  • 整數除法截斷:Width / 4 → 改為 Width / 4f 或 (float)Width / 4
  • 隱式轉換丟失精度:避免 Point p = new Point((int)x, (int)y)
  • 大座標值溢出:float 精度約 7 位有效數字
用戶頭像
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved