2010-04-06 12 views
5

Nel gestore vernice del mio controllo utente Ho iterare su una collezione di oggetti Bitmap predefiniti e disegnarli per l'area client così:Come aumentare le prestazioni su DrawImage di GDI (non ridimensionato)?

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 correttamente ma inizia a impantanarsi quando una dozzina di oggetti vengono aggiunti alla raccolta. La mia domanda è: c'è un modo per accelerare questo? Sarebbe possibile utilizzare la funzione bitmap Win32 per sostituire DrawImageUnscaled? E se sì, come?

Grazie!

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

+0

ping indietro @ http://stackoverflow.com/questions/264720/gdi-graphicsdrawimage-really-slow – dankyy1

risposta

6

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

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

io non sono sicuro di stabilità, ha alcuni problemi con coulisse (problema con TextPrint da OpenTK). Ma se hai bisogno di aumentare le prestazioni per la tua utility (come editor di livelli nel mio caso) può essere una soluzione.

+0

Molto interessante. Darò un'occhiata. Grazie. –

Problemi correlati