Gráficos de doble búfer

El parpadeo es un problema frecuente al programar gráficos. Las operaciones gráficas que requieren varias operaciones de pintura complejas pueden hacer que las imágenes representadas parezcan parpadear o tengan un aspecto de algún modo inaceptable. Para resolver estos problemas, .NET Framework proporciona acceso al almacenamiento en doble búfer.

El almacenamiento en doble búfer usa un búfer de memoria para solucionar los problemas de parpadeo asociados a varias operaciones de pintura. Cuando se habilita el almacenamiento en doble búfer, todas las operaciones de pintura se representan primero en un búfer de memoria en lugar de la superficie de dibujo en la pantalla. Una vez completadas todas las operaciones de pintura, el búfer de memoria se copia directamente en la superficie de dibujo asociada a él. Como solo se realiza una única operación gráfica en la pantalla, se elimina el parpadeo de las imágenes asociado a las operaciones de pintura complejas.

Almacenamiento en doble búfer predeterminado

La manera más fácil de usar el almacenamiento en doble búfer en la aplicación consiste en usar el almacenamiento en doble búfer predeterminado para formularios y controles que ofrece .NET Framework. Puede habilitar el almacenamiento en doble búfer predeterminado para los formularios de Windows Forms y para controles creados en Windows. Para ello, establezca la propiedad DoubleBuffered en true o use el método SetStyle. Para más información, consulte How to: Reduce Graphics Flicker with Double Buffering for Forms and Controls (Cómo: Reducir el parpadeo de gráficos con almacenamiento en doble búfer de formularios y controles).

Administración manual de gráficos almacenados en búfer

En el caso de escenarios de almacenamiento en doble búfer más avanzados, como animación y administración avanzada de memoria, puede usar las clases de .NET Framework para implementar su propia lógica de almacenamiento en doble búfer. La clase responsable de asignar y administrar los distintos búferes de gráficos es BufferedGraphicsContext. Cada dominio de aplicación tiene su propia instancia de BufferedGraphicsContext predeterminada que administra todo el almacenamiento en doble búfer predeterminado para dicha aplicación. En la mayoría de los casos, solo habrá un dominio de aplicación por aplicación, por lo que normalmente hay un elemento BufferedGraphicsContext predeterminado por aplicación. La clase BufferedGraphicsManager administra las instancias de BufferedGraphicsContext predeterminadas. Puede recuperar una referencia a esta instancia BufferedGraphicsContext predeterminada llamando a Current. También se puede crear una instancia de BufferedGraphicsContext dedicada, lo que puede mejorar el rendimiento de aplicaciones con elevados requisitos gráficos. Para obtener información sobre cómo crear una instancia de BufferedGraphicsContext, vea Procedimientos para administrar manualmente gráficos almacenados en búfer.

Presentación manual de gráficos almacenados en búfer

Puede usar una instancia de la clase BufferedGraphicsContext para crear búferes de gráficos llamando a BufferedGraphicsContext.Allocate, que devuelve una instancia de la clase BufferedGraphics. Un objeto BufferedGraphics administra un búfer de memoria que se asocia a una superficie de representación como, por ejemplo, un formulario o un control.

Una vez creada la instancia, la clase BufferedGraphics administra la representación en un búfer de gráficos en memoria. Puede representar gráficos en el búfer de memoria mediante Graphics, que expone un objeto Graphics que representa directamente el búfer de memoria. Puede pintar en este objeto Graphics del mismo modo que lo haría en un objeto Graphics que represente una superficie de dibujo. Cuando todos los gráficos se hayan dibujado en el búfer, puede usar BufferedGraphics.Render para copiar el contenido del búfer en la superficie de dibujo en la pantalla.

Para obtener más información sobre cómo usar la clase <>BufferedGraphics, vea Representación manual de gráficos almacenados en búfer. Para más información sobre la representación de gráficos, vea Gráficos y dibujos en Windows Forms

Consulte también