如何使用C#(如Paint.NET)实现平滑绘图

本文关键字:实现 平滑 绘图 Paint 何使用 NET | 更新日期: 2023-09-27 18:22:49

Paint.NET如何使用C#快速绘制?示例:椭圆周长是在拖动鼠标时绘制的,没有任何可见的延迟。在C#中的一个简单的windows窗体应用程序中,如果你使用Picturebox的MouseMove事件并根据鼠标位置绘制一个椭圆,就会有很多延迟和闪烁!那么,他们是如何做到如此顺利的呢?

如何使用C#(如Paint.NET)实现平滑绘图

我对Paint.Net代码没有特别的了解,但很可能它使用了Double Buffering,并且可能是在自定义绘图表面上手动实现的,而不是在预打包控件中简单化的实现。

Paint.NET在调用Invalidate()后调用Update(),Invalidate强制立即同步WM_Paint。

要获得平滑的绘图,您应该:

  • 使用双重缓冲(http://msdn.microsoft.com/en-us/library/b367a457.aspx)
  • 使用专用工具包进行渲染(OpenGL/DirectDraw等)

在这种情况下,最好的方法是使用Double Buffering——它在.NET框架中得到了"开箱即用"的支持,只需要很少的工作,并且可以消除闪烁。

他们可能使用WPF。它比表单快得多。