2011-08-12 116 views
1

我想用Graphics.Lines()方法繪製粗線。但它看起來像API有一些錯誤。如果您嘗試使用以下代碼呈現用戶控件,您會看到奇怪的圖像。我想知道是否有一些平滑模式或類似的東西可以照顧這個線條畫故障。C#.NET中的粗線繪製問題

private void UserControl1_Paint(object sender, PaintEventArgs e) 
    { 
     int n = 100; 
     Point[] points = new Point[n]; 

     double x = 2; 
     int y = 50; 

     for (int i = 0; i < n; i++) 
     { 
      Point p = new Point(); 
      p.X = 200 + (int)(i * x); 
      p.Y = 200 + (int)(Math.Sin(i * 0.2) * y); 
      points[i] = p; 
     } 

     Pen pen = new Pen(new SolidBrush(Color.Blue)); 
     //Pen pen = new Pen(new LinearGradientBrush(new Point(0, 0), new Point(0, 100), Color.Black, Color.Red)); 
     pen.Width = 200; 
     e.Graphics.DrawLines(pen, points); 
    } 
+3

你能否用截圖澄清「怪異」? –

+1

你爲什麼使用200的寬度? –

+0

@邁克爾的東西:使'pen.Width = 1',我想你會得到你要的東西。 –

回答

3

這裏是您的代碼中使用寬度200(像素)的筆繪製的結果:

200 pen width

這裏,它是按2:1的寬度:

2 pen width

pen width property通常是像素,但它是基於圖形對象的PageUnit pr operty(本身是GraphicsUnit屬性)。檢查以確保您已將這些值設置爲您想要的值。

+0

這些是我得到的確切結果。 GraphicsUnit設置爲像素。我不想讓第一張照片看起來像魔鬼。我希望它被吸引。 – dattebayo

+1

如果順利地指沒有邊緣不齊,請查看AntiAliasing,例如:'g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;'(其中g是圖形對象)。如果您指的是線條重疊的倒置顏色空間(白色空白),不幸的是這是一個單獨的問題。避免這些間隙的最厚線是使用您的代碼約105個像素。 – JYelton

+0

嗨J,是的,我的意思是,在粗線區域填充顏色。 – dattebayo

6

您會看到GDI +嘗試繪製線上的端蓋的效果。用這麼厚的筆,這不會很好。關於daVinci用掃帚繪製蒙娜麗莎的想法。修復:

 Pen pen = new Pen(new SolidBrush(Color.Blue)); 
     pen.EndCap = System.Drawing.Drawing2D.LineCap.Square; 
     pen.StartCap = System.Drawing.Drawing2D.LineCap.Square; 

或繪製多邊形,而不是讓GDI +還有更好的主意是什麼正面和背面:

 e.Graphics.DrawPolygon(pen, points); 

那麼,它看起來並不像一個魔鬼了。保持線條寬度與線條中的細節成比例。