Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Actualización: noviembre 2007
Puede reducir el parpadeo mientras se dibujan imágenes de gran tamaño utilizando un objeto Graphics que no esté asociado al formulario para crear la imagen fuera de la pantalla. A continuación dibuje la imagen en la pantalla utilizando un objeto Graphics del formulario.
Ejemplo
Este ejemplo reemplaza al método OnPaint para crear un mapa de bits de gran tamaño fuera de la pantalla utilizando un objeto Graphics derivado del mapa de bits. A continuación, lleva el mapa de bits a la pantalla utilizando el objeto Graphics devuelto por la propiedad Graphics de PaintEventArgs.
Después de cargar el formulario, la imagen puede tardar unos segundos en aparecer.
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim bmp As Bitmap
Dim gOff As Graphics
' Create a bitmap the size of the form.
bmp = New Bitmap(ClientRectangle.Width, ClientRectangle.Height)
Dim BlueBrush As New SolidBrush(Color.Blue)
Dim WhitePen As New Pen(Color.White, 3)
' Create a Graphics object that is not on the form.
gOff = Graphics.FromImage(bmp)
gOff.FillRectangle(new SolidBrush(color.red), 0, 0, _
bmp.Width, bmp.Height)
' Draw a complex bitmap of 1000 random rectangles. It will take a few
' seconds to draw.
Dim z As Integer
For z = 1 To 1000
' Generate a random number with
' seeds from the system clock.
Thread.Sleep(1)
Dim rx As New Random()
Thread.Sleep(1)
Dim ry As New Random()
' Create rectangles in the inner area of the form.
Dim rect As New Rectangle(rx.Next(10,200), ry.Next(10,200), 10, 10)
gOff.DrawRectangle(WhitePen, rect)
gOff.FillRectangle(BlueBrush, rect)
Next z
' Use the Graphics object from
' PaintEventArgs to draw the bitmap onto the screen.
e.Graphics.DrawImage(bmp, 0, 0, ClientRectangle, GraphicsUnit.Pixel)
gOff.Dispose()
End Sub
protected override void OnPaint(PaintEventArgs e)
{
Bitmap bmp;
Graphics gOff;
// Create a bitmap the size of the form.
bmp = new Bitmap(ClientRectangle.Width, ClientRectangle.Height);
SolidBrush BlueBrush = new SolidBrush(Color.Blue);
Pen WhitePen = new Pen(Color.White,3);
// Create a Graphics object that is not on the form.
gOff = Graphics.FromImage(bmp);
gOff.FillRectangle(new SolidBrush(Color.Red), 0, 0,
bmp.Width, bmp.Height);
// Draw a complex bitmap of 1000 random rectangles. It will take a few
// seconds to draw.
for (int z = 1; z <= 1000; z++)
{
// Generate a random number with
// seeds from the system clock.
Thread.Sleep(1);
Random rx = new Random();
Thread.Sleep(1);
Random ry = new Random();
// Create rectangles in the inner area of the form.
Rectangle rect = new Rectangle(rx.Next(10,200), ry.Next(10,200),
10, 10);
gOff.DrawRectangle(WhitePen, rect);
gOff.FillRectangle(BlueBrush, rect);
}
// Use the Graphics object from
// PaintEventArgs to draw the bitmap onto the screen.
e.Graphics.DrawImage(bmp, 0, 0, ClientRectangle, GraphicsUnit.Pixel);
gOff.Dispose();
}
Compilar el código
Para este ejemplo se requieren referencias a los siguientes espacios de nombres:
Programación eficaz
Tenga en cuenta que debe eliminarse el objeto Graphics creado para el dibujo fuera de pantalla. El recolector de elementos no utilizados destruye el objeto Graphics devuelto por la propiedad Graphics del objeto PaintEventArgs, por lo que no es necesario eliminarlo de manera explícita.