Elementos Gráficos em Buffer Duplo

A cintilação é um problema comum na programação de gráficos. Operações gráficas que requerem várias operações de pintura complexas podem fazer as imagens renderizadas parecerem cintilar ou ter uma aparência inaceitável por outro motivo. Para resolver esses problemas, o .NET Framework dá acesso a 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 estiver habilitado, todas as operações de pintura serão renderizadas primeiro em um buffer de memória, em vez de na superfície de desenho na tela. Depois que todas as operações de pintura estiverem concluídas, o buffer de memória será copiado diretamente para a superfície de desenho associada a ele. Uma vez que somente uma operação gráfica é executada na tela, a cintilação de 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 o .NET Framework fornece. Você pode habilitar o buffer duplo padrão para seus Windows Forms e controles criados do Windows definindo a propriedade como true ou usando o DoubleBufferedSetStyle método. Para obter mais informações, confira Como reduzir a cintilação em elementos gráficos com buffers duplos para formulários e controles.

Gerenciando elementos gráficos em buffer manualmente

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 BufferedGraphicsManager pela 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 elementos gráficos em buffer manualmente

Você pode usar uma instância da classe para criar buffers gráficos chamando o BufferedGraphicsContext.Allocate, que retorna uma instância da BufferedGraphicsContextBufferedGraphics 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 em um buffer gráfico na memória. Você pode renderizar elementos 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 para esse Graphics objeto da mesma forma que faria para 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 Renderizando manualmente gráficos em buffer. Para obter mais informações sobre a renderização de gráficos, consulte Elementos gráficos e desenho nos Windows Forms

Confira também