双缓冲图形

在编程图形时,闪烁是一个常见问题。 需要多个复杂绘制操作的图形操作可能会导致呈现的图像看起来闪烁或出现其他不可接受的外观。 为了解决这些问题,.NET Framework 提供对双重缓冲的访问权限。

双缓冲使用内存缓冲区来解决与多个绘制操作关联的闪烁问题。 启用双缓冲后,所有绘制操作将首先被渲染到内存缓冲区,而不是屏幕上的绘图界面。 在完成所有绘制操作后,内存缓冲区将直接复制到与其关联的绘图图面上。 由于屏幕上只执行一个图形操作,因此将消除与复杂绘制操作关联的图像闪烁。

默认双缓冲

在应用程序中使用双缓冲的最简单方法是对 .NET Framework 提供的窗体和控件使用默认的双重缓冲。 可以通过将 DoubleBuffered 属性设置为 true 或使用 SetStyle 方法,为您的 Windows 窗体和自定义的 Windows 控件启用默认双缓冲。 有关详细信息,请参阅 如何:通过双重缓冲减少窗体和控件的图形闪烁

手动管理缓冲图形

对于更高级的双缓冲方案(如动画或高级内存管理),可以使用 .NET Framework 类来实现自己的双缓冲逻辑。 负责分配和管理单个图形缓冲区的类是 BufferedGraphicsContext 类。 每个应用程序域都有自己的默认 BufferedGraphicsContext 实例,用于管理该应用程序的所有默认双缓冲。 在大多数情况下,每个应用程序只有一个应用程序域,因此每个应用程序通常有一个默认 BufferedGraphicsContext。 默认 BufferedGraphicsContext 实例由 BufferedGraphicsManager 类管理。 可以通过调用 Current来检索对默认 BufferedGraphicsContext 实例的引用。 还可以创建专用 BufferedGraphicsContext 实例,从而提高图形密集型应用程序的性能。 有关如何创建 BufferedGraphicsContext 实例的信息,请参阅 如何:手动管理缓冲图形

手动显示缓冲图形

可以使用 BufferedGraphicsContext 类的实例通过调用返回 BufferedGraphics 类的实例 BufferedGraphicsContext.Allocate来创建图形缓冲区。 BufferedGraphics 对象管理与呈现图面(如窗体或控件)关联的内存缓冲区。

实例化后,BufferedGraphics 类管理向内存中图形缓冲的呈现。 通过 Graphics(它公开一个直接表示内存缓冲的 Graphics 对象),可将图形呈现到内存缓冲。 可绘制到此 Graphics 对象,正如绘制到表示绘图图面的 Graphics 对象一样。 将所有图形绘制到缓冲区后,可以使用 BufferedGraphics.Render 将缓冲区的内容复制到屏幕上的绘图图面。

有关使用 BufferedGraphics 类的详细信息,请参阅 手动呈现缓冲图形。 有关呈现图形的详细信息,请参阅 Windows 窗体中的图形和绘制

另请参阅