Compartilhar via


Gráficos com buffer duplo

A cintilação é um problema comum na programação gráfica. Operações gráficas que exigem várias operações de pintura complexas podem fazer com que as imagens renderizadas pareçam piscar ou ter uma aparência inaceitável de outra forma. Para resolver esses problemas, o .NET Framework fornece acesso ao buffer duplo.

O buffer duplo usa um buffer de memória para resolver os problemas de cintilação associados a várias operações de pintura. Quando o buffer duplo está habilitado, todas as operações de pintura são renderizadas pela primeira vez em um buffer de memória em vez da superfície de desenho na tela. Depois que todas as operações de pintura forem concluídas, o buffer de memória será copiado diretamente para a superfície de desenho associada a ele. Como apenas uma operação gráfica é executada na tela, a cintilação de imagem associada a operações complexas de pintura é eliminada.

Buffer duplo padrão

A maneira mais fácil de usar o buffer duplo em seus aplicativos é usar o buffer duplo padrão para formulários e controles fornecidos pelo .NET Framework. Você pode habilitar o padrão de buffer duplo para seus Windows Forms e controles Windows autorizados definindo a propriedade DoubleBuffered como true ou usando o método SetStyle. Para obter mais informações, consulte Como reduzir a cintilação de elementos gráficos com buffer duplo para formulários e controles.

Gerenciamento manual de elementos gráficos em buffer

Para cenários de buffer duplo mais avançados, como animação ou gerenciamento avançado de memória, você pode usar as classes do .NET Framework para implementar sua própria lógica de buffer duplo. A classe responsável por alocar e gerenciar buffers gráficos individuais é a BufferedGraphicsContext classe. Cada domínio de aplicativo tem sua própria instância padrão BufferedGraphicsContext que gerencia todo o buffer duplo padrão para esse aplicativo. Na maioria dos casos, haverá apenas um domínio de aplicativo por aplicativo, portanto, geralmente há um padrão BufferedGraphicsContext por aplicativo. As instâncias padrão BufferedGraphicsContext são gerenciadas pela BufferedGraphicsManager classe. Você pode recuperar uma referência à instância padrão BufferedGraphicsContext chamando o Current. Você também pode criar uma instância dedicada BufferedGraphicsContext , que pode melhorar o desempenho de aplicativos graficamente intensivos. Para obter informações sobre como criar uma BufferedGraphicsContext instância, consulte Como gerenciar manualmente gráficos em buffer.

Exibindo manualmente gráficos em buffer

Você pode usar uma instância da BufferedGraphicsContext classe para criar buffers gráficos chamando o BufferedGraphicsContext.Allocate, que retorna uma instância da BufferedGraphics classe. Um BufferedGraphics objeto gerencia um buffer de memória associado a uma superfície de renderização, como um formulário ou controle.

Depois de instanciada, a classe gerencia a BufferedGraphics renderização para um buffer de gráficos em memória. Você pode renderizar gráficos para o buffer de memória por meio do Graphics, que expõe um Graphics objeto que representa diretamente o buffer de memória. Você pode pintar nesse Graphics objeto da mesma maneira que faria em um Graphics objeto que representa uma superfície de desenho. Depois que todos os gráficos tiverem sido desenhados para o buffer, você poderá usar o BufferedGraphics.Render para copiar o conteúdo do buffer para a superfície de desenho na tela.

Para obter mais informações sobre como usar a BufferedGraphics classe, consulte Manualmente Renderizando gráficos em buffer. Para obter mais informações sobre a renderização de elementos gráficos, consulte Gráficos e Desenho nos Windows Forms

Consulte também