我用下面的代码绘制行:如何使drawLine更平滑?
Graphics g = this.CreateGraphics();
Pen p = new Pen(Color.Black,3);
g.DrawLine(p,...);
// ...
为什么直线锯齿样的,不是笔直光滑的。我怎样才能让它变得平直和顺畅?
我用下面的代码绘制行:如何使drawLine更平滑?
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
在99.9%的情况下使用Control.CreateGraphics()是错误的。无论你画什么都不能坚持。当你最小化和恢复窗口时,它将会消失。或者当你将它从屏幕上移回来时。或者当你在XP和任何没有启用Aero的机器上与另一个窗口重叠时。 CreateGraphics()仅适用于帧速率大于20fps的动画。
重写窗体的OnPaint()方法或实现控件的Paint事件。使用传递的e.Graphics对象进行绘制。也解决了这个问题,它将被正确初始化以绘制消除锯齿的行。并且可以双重缓冲,因此不会闪烁。调用Invalidate()来强制重绘。
是的!这是我起初看不到任何线路的原因。我为Paint增加了一个事件处理程序。我试图通过e.Graphics,但它给出了一个错误“无效的参数”。 – spspli 2011-04-06 23:06:00
还有吗?传递给什么? – 2011-04-06 23:55:50
@spspli:你不会把e.Graphics * *传递给任何东西。您只需调用它的'DrawLine'函数:'e.Graphics.DrawLine(p,...)' – 2011-04-07 06:56:38
*之字形*?这让我觉得你不只是在谈论一些反锯齿可以修复的东西。你可以张贴截图吗? – 2011-04-06 15:50:14