2010-04-06 4 views
5

In meinem Lack Handler Benutzerkontrolle iterieren ich über eine Sammlung von vordefinierten Bitmap-Objekte und sie an den Client-Bereich zeichnen thusly:Wie kann die Leistung gegenüber GDI's DrawImage (unscaled) erhöht werden?

C# Version:

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

VB.NET Version:

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 

Der Code funktioniert gut, aber beginnt zu bombardieren, wenn ein Dutzend Objekte zur Sammlung hinzugefügt werden. Meine Frage ist: Gibt es eine Möglichkeit, dies zu beschleunigen? Wäre es möglich, die Win32-Bitblt-Funktion zu verwenden, um DrawImageUnscaled zu ersetzen? Und wenn ja wie?

Danke!

Hinweis: für useage von BitBlt Googeln hat ergab mir nur Abschirmkappe Proben so weit ...

+0

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

Antwort

6

zu spät, aber vielleicht jemand braucht noch eine Lösung.

Ich habe kleine Bibliothek GLGDI + mit similiar GDI + Syntax erstellt, die auf OpenTK laufen: http://code.google.com/p/glgdiplus/

ich über die Stabilität nicht sicher bin, hat es einige Probleme mit DrawString (Problem mit TextPrint von OpenTK). Aber wenn Sie Leistungssteigerung für Ihr Dienstprogramm benötigen (wie Level-Editor in meinem Fall), kann es Lösung sein.

+0

Sehr interessant. Ich werde es mir ansehen. Vielen Dank. –

Verwandte Themen