Como: Copiar Pixels para reduzir a cintilação do Windows Forms

Ao animar um gráfico simples, os usuários às vezes, podem encontrar cintilação ou outros efeitos visuais indesejáveis. Uma maneira de limitar esse problema é usar o "bitblt" processar o elemento gráfico. BitBlt é a "transferência de blocos de bits" os dados de cor de um retângulo de origem de pixels para um retângulo de destino de pixels.

Com o Windows Forms, bitblt é realizada por meio de CopyFromScreen método o Graphics classe. Nos parâmetros do método, você pode especificar a origem e destino (como pontos), o tamanho da área a ser copiado e o objeto graphics utilizada para desenhar a nova forma.

No exemplo a seguir, uma forma é desenhada no formulário em seu Paint manipulador de eventos. Então, a CopyFromScreen método é usado para duplicar a forma.

ObservaçãoObservação

A definição do formulário DoubleBuffered propriedade para true fará com que o código baseado em elementos gráficos na Paint evento ser buffer duplo. Embora isso não terá qualquer ganho de desempenho discernível ao usar o código a seguir, é algo ter em mente ao trabalhar com código de manipulação de gráficos mais complexo.

Exemplo

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As _
    System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
    ' Draw a circle with a bar on top.
        e.Graphics.FillEllipse(Brushes.DarkBlue, New Rectangle _
             (10, 10, 60, 60))
        e.Graphics.FillRectangle(Brushes.Khaki, New Rectangle _
             (20, 30, 60, 10))
    ' Copy the graphic to a new location.
        e.Graphics.CopyFromScreen(New Point(10, 10), New Point _
             (100, 100), New Size(70, 70))
End Sub
private void Form1_Paint(System.Object sender,
    System.Windows.Forms.PaintEventArgs e)
        {
        e.Graphics.FillEllipse(Brushes.DarkBlue, new
            Rectangle(10,10,60,60));
        e.Graphics.FillRectangle(Brushes.Khaki, new
            Rectangle(20,30,60,10));
        e.Graphics.CopyFromScreen(new Point(10, 10), new Point(100, 100), 
            new Size(70, 70));
}

Compilando o código

O código acima é executado no formulário de Paint manipulador de eventos para que os gráficos persistem quando o formulário é redesenhado. Como tal, não chamar métodos relacionados a elementos gráficos do Load o manipulador de eventos, porque o conteúdo desenhado não ser redesenhado se o formulário é redimensionado ou obscurecido por outro formulário.

Consulte também

Referência

CopyPixelOperation

Graphics.FillRectangle

Control.OnPaint

Outros recursos

Elementos gráficos e desenho em formulários do Windows

Usando uma caneta para desenhar linhas e formas