Partilhar via


Gráficos com buffer duplo

Flicker é um problema comum ao programar gráficos. As operações gráficas que exigem várias operações de pintura complexas podem fazer com que as imagens renderizadas pareçam cintilar ou tenham uma aparência inaceitável. Para resolver esses problemas, o .NET Framework fornece acesso a buffer duplo.

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

Buffer duplo padrão

A maneira mais fácil de usar buffer duplo em seus aplicativos é usar o buffer duplo padrão para formulários e controles que é fornecido pelo .NET Framework. Você pode habilitar o buffer duplo padrão para seus Windows Forms e controles criados do Windows 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.

Gerenciando manualmente 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 classe BufferedGraphicsContext. Cada domínio de aplicativo tem sua própria instância de BufferedGraphicsContext padrão 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 BufferedGraphicsContext padrão por aplicativo. As instâncias de BufferedGraphicsContext padrão são gerenciadas pela classe BufferedGraphicsManager. Você pode recuperar uma referência à instância BufferedGraphicsContext padrão chamando o Current. Você também pode criar uma instância de BufferedGraphicsContext dedicada, que pode melhorar o desempenho para aplicativos graficamente intensivos. Para obter informações sobre como criar uma instância BufferedGraphicsContext, consulte Como gerenciar manualmente gráficos em buffer.

Exibindo manualmente gráficos em buffer

Você pode usar uma instância da classe BufferedGraphicsContext para criar buffers gráficos chamando o BufferedGraphicsContext.Allocate, que retorna uma instância da classe BufferedGraphics. Um objeto BufferedGraphics 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 BufferedGraphics gerencia a renderização em um buffer gráfico na memória. Você pode renderizar gráficos para o buffer de memória através do Graphics, que expõe um objeto Graphics que representa diretamente o buffer de memória. Você pode pintar para esse objeto Graphics da mesma forma que pintaria para um objeto Graphics que representa uma superfície de desenho. Depois de todos os gráficos terem sido desenhados para o buffer, você pode 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 classe BufferedGraphics, consulte Renderização manual de gráficos em buffer. Para obter mais informações sobre renderização de gráficos, consulte Gráficos e Desenho no Windows Forms

Ver também