Compartilhar via


Gráficos com buffer duplo

A cintilação é um problema comum na programação de gráficos. 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 buffer duplo padrão para seus Windows Forms e controles do Windows criados definindo a propriedade DoubleBuffered como true ou usando o método SetStyle. Para obter mais informações, confira Como reduzir a cintilação em elementos gráficos com buffers duplos 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 classe BufferedGraphicsContext. Cada domínio de aplicativo tem sua própria instância padrão BufferedGraphicsContext que gerencia todo o buffering 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 de BufferedGraphicsContext padrão são gerenciadas pela classe BufferedGraphicsManager. Você pode recuperar uma referência à instância de BufferedGraphicsContext padrão chamando o Current. Você também pode criar uma instância de BufferedGraphicsContext dedicada, que pode melhorar o desempenho de aplicativos graficamente intensivos. Para obter informações sobre como criar uma instância de 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 instanciado, a classe BufferedGraphics gerencia a renderização em um buffer de gráficos na memória. Você pode renderizar gráficos para o buffer de memória por meio do Graphics, que expõe um objeto Graphics que representa diretamente o buffer de memória. Você pode pintar para esse objeto Graphics exatamente como faria com um objeto Graphics que representa uma superfície de desenho. Depois que todos os elementos 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 classe BufferedGraphics, consulte Renderização manual de gráficos em buffer. Para obter mais informações sobre a renderização de elementos gráficos, consulte Gráficos e Desenho no Windows Forms

Consulte também