Cómo: Copiar píxeles para reducir el parpadeo en formularios Windows Forms

Actualización: noviembre 2007

Cuando anima un gráfico simple, los usuarios a veces pueden notar parpadeos u otros efectos visuales no deseados. Una manera de limitar este problema es utilizar un proceso "bitblt" en el gráfico. Bitblt es la transferencia de bloque de bits de los datos de color de un rectángulo de origen de píxeles a un rectángulo de destino de píxeles.

Con formularios Windows Forms, bitblt se realiza utilizando el método CopyFromScreen de la clase Graphics. En los parámetros del método, puede especificar el origen y el destino (como puntos), el tamaño del área que se va a copiar y el objeto Graphics utilizado para dibujar la nueva forma.

En el ejemplo siguiente, se arrastra una forma del formulario a su controlador del evento Paint. A continuación, el método CopyFromScreen se utiliza para duplicar la forma.

Nota:

Establecer la propiedad DoubleBuffered del formulario en true hará que el código basado en gráficos en el evento Paint sea de doble búfer. Mientras que esto no suponga mejoras de rendimiento apreciables al utilizar el código que se muestra a continuación, simplemente sirve para tener en cuenta cuando se trabaja con ejemplos de manipulación de gráficos más complejos.

Ejemplo

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));
}

Compilar el código

El código anterior se ejecuta en el controlador de eventos del formulario Paint para que conservar los gráficos cuando se vuelve a diseñar el formulario. Por ello, no llame a métodos relacionados con gráficos del controlador de eventos Load, puesto que el contenido dibujado no se vuelve a dibujar si otro formulario cambia su tamaño o lo oscurece

Vea también

Referencia

CopyPixelOperation

Graphics.FillRectangle

Control.OnPaint

Otros recursos

Gráficos y dibujos en formularios Windows Forms

Utilizar lápiz para dibujar líneas y formas