2011-04-06 54 views
4

我用下面的代码绘制行:如何使drawLine更平滑?

Graphics g = this.CreateGraphics(); 
Pen p = new Pen(Color.Black,3); 
g.DrawLine(p,...); 
// ... 

为什么直线锯齿样的,不是笔直光滑的。我怎样才能让它变得平直和顺畅?

+0

*之字形*?这让我觉得你不只是在谈论一些反锯齿可以修复的东西。你可以张贴截图吗? – 2011-04-06 15:50:14

回答

8

在99.9%的情况下使用Control.CreateGraphics()是错误的。无论你画什么都不能坚持。当你最小化和恢复窗口时,它将会消失。或者当你将它从屏幕上移回来时。或者当你在XP和任何没有启用Aero的机器上与另一个窗口重叠时。 CreateGraphics()仅适用于帧速率大于20fps的动画。

重写窗体的OnPaint()方法或实现控件的Paint事件。使用传递的e.Graphics对象进行绘制。也解决了这个问题,它将被正确初始化以绘制消除锯齿的行。并且可以双重缓冲,因此不会闪烁。调用Invalidate()来强制重绘。

+0

是的!这是我起初看不到任何线路的原因。我为Paint增加了一个事件处理程序。我试图通过e.Graphics,但它给出了一个错误“无效的参数”。 – spspli 2011-04-06 23:06:00

+0

还有吗?传递给什么? – 2011-04-06 23:55:50

+0

@spspli:你不会把e.Graphics * *传递给任何东西。您只需调用它的'DrawLine'函数:'e.Graphics.DrawLine(p,...)' – 2011-04-07 06:56:38