Domanda

Nel gestore vernice del mio controllo utente Ho iterare su una collezione di oggetti bitmap predefiniti e disegnarli per l'area client nel seguente modo:

C # versione:

private void Control_Paint(object sender, PaintEventArgs e) {
    Graphics g = e.Graphics;
    foreach (BitmapObj bmpObj in _bitmapObjCollection) {
        g.DrawImageUnscaled(bmpObj.Bitmap, bmpObj.Location);
    }
}

versione VB.NET:

Private Sub Control_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles MyBase.Paint
    Dim g As Graphics = e.Graphics

    For Each bmpObj As BitmapObj In _bitmapObjCollection
        g.DrawImageUnscaled(bmpObj.Bitmap, bmpObj.Location)
    Next
End Sub

Il codice funziona bene, ma comincia a impantanarsi quando una dozzina di oggetti vengono aggiunti alla collezione. La mia domanda è: C'è un modo per accelerare questo? Sarebbe possibile utilizzare la funzione BitBlt Win32 per sostituire DrawImageUnscaled? E se sì, come?

Grazie!

Nota: Googling per useage di BitBlt ha ceduto solo mi schermo campioni cap finora ...

È stato utile?

Soluzione

Troppo tardi, ma forse qualcuno ancora bisogno di una soluzione.

ho creato piccola biblioteca GLGDI + con GDI + simile sintassi, che corrono su OpenTK: http://code.google.com/p/glgdiplus/

Non sono sicuro circa la stabilità, ha alcuni problemi con coulisse (problema con TextPrint da OpenTK). Ma se avete bisogno di incremento delle prestazioni per il vostro programma di utilità (come editor di livelli nel mio caso) può essere una soluzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top