SO WIRD'S GEMACHT: Zeichnen Sie Bilder Off-Screen
Dieser Dokumentation für die Vorschau nur ist und in späteren Versionen geändert. Leere Themen wurden als Platzhalter eingefügt.]
Sie können das Flimmern reduzieren, wenn das Formular, um das Bild außerhalb des Bildschirms erstellen Zeichnung große Bilder nicht mithilfe eines Graphics-Objekts zugeordnet. Zeichnen Sie dann das Bild auf dem Bildschirm mit einem Graphics-Objekt des Formulars.
Beispiel
In diesem Beispiel überschreibt die OnPaint -Methode, um eine große Bitmap Bildschirm mit einem von der Bitmap abgeleiteten Graphics-Objekt erstellen. Anschließend zeichnet es die Bitmap, auf den Bildschirm mithilfe der zurückgegebenen aus der GraphicsGraphicsPaintEventArgs-Objekts.
Nach dem Laden des Formulars kann es ein paar Sekunden für das Bild angezeigt werden dauern.
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 AsNew SolidBrush(Color.Blue)
Dim WhitePen AsNew 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 AsIntegerFor z = 1 To 1000
' Generate a random number with ' seeds from the system clock.
Thread.Sleep(1)
Dim rx AsNew Random()
Thread.Sleep(1)
Dim ry AsNew Random()
' Create rectangles in the inner area of the form.Dim rect AsNew 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()
EndSub
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();
}
Kompilieren des Codes
In diesem Beispiel sind Verweise auf die folgenden Namespaces erforderlich:
Robuste Programmierung
Beachten Sie, dass das Graphics-Objekt für die Offscreen Zeichnung erstellt verworfen werden sollte. Das von der Graphics -Eigenschaft des Graphics -Objekts zurückgegebene PaintEventArgs Objekt vom Garbage Collector zerstört und muss nicht explizit freigegeben werden.