【发布时间】:2011-04-06 15:46:14
【问题描述】:
我用下面的代码画线:
Graphics g = this.CreateGraphics();
Pen p = new Pen(Color.Black,3);
g.DrawLine(p,...);
// ...
为什么直线是曲折的,一点也不直和平滑。怎样才能让它更直更流畅?
【问题讨论】:
-
之字形?这让我觉得你不只是在谈论一些抗锯齿可以解决的问题。可以发个截图吗?
我用下面的代码画线:
Graphics g = this.CreateGraphics();
Pen p = new Pen(Color.Black,3);
g.DrawLine(p,...);
// ...
为什么直线是曲折的,一点也不直和平滑。怎样才能让它更直更流畅?
【问题讨论】:
您需要启用抗锯齿功能。将Graphics.SmoothingMode 设置为AntiAlias,如下所述:http://msdn.microsoft.com/en-us/library/system.drawing.graphics.smoothingmode.aspx
【讨论】:
覆盖表单的 OnPaint() 方法或实现控件的 Paint 事件。使用传递的 e.Graphics 对象进行绘制。 它将被正确初始化以绘制抗锯齿线。并且可以进行双缓冲,因此不会闪烁。调用 Invalidate() 强制重绘。
在 99.9% 的情况下,使用 Control.CreateGraphics() 是错误的。无论你画什么都不能持久。当您最小化和恢复窗口时,它就会消失。或者当您将其部分移出屏幕并移回时。或者当您在 XP 和任何未启用 Aero 的机器上重叠另一个窗口时。 CreateGraphics() 仅适用于帧速率大于 ~20 fps 的动画。
【讨论】:
e.Graphics 传递给任何东西。你只需调用它的DrawLine 函数:e.Graphics.DrawLine(p, ...)