Condividi tramite


Procedura: disegnare immagini fuori schermo

Aggiornamento: novembre 2007

Per ridurre lo sfarfallio durante il disegno di immagini grandi, è possibile utilizzare un oggetto Graphics non associato al form in modo da creare l'immagine fuori schermo. Disegnare quindi l'immagine su schermo utilizzando un oggetto Graphics del form.

Esempio

Nell'esempio viene eseguito l'override del metodo OnPaint per creare una bitmap grande fuori schermo utilizzando un oggetto Graphics derivato dalla bitmap. La bitmap viene quindi disegnata sullo schermo utilizzando l'oggetto Graphics restituito dalla proprietà Graphics della classe PaintEventArgs.

Una volta caricato il modulo, la visualizzazione dell'immagine può richiedere qualche secondo.

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

Compilazione del codice

Questo esempio richiede riferimenti ai seguenti spazi dei nomi:

Programmazione efficiente

Si noti che l'oggetto Graphics creato per il disegno fuori schermo deve essere eliminato. L'oggetto Graphics restituito dalla proprietà Graphics dell'oggetto PaintEventArgs viene eliminato in modo permanente dal Garbage Collector e non deve essere eliminato in modo esplicito.

Vedere anche

Altre risorse

Grafica e disegno in .NET Compact Framework