2010-04-06 10 views
5

farbą obsługi moją kontrolą autora I iteracyjne nad zbiór predefiniowanych obiektów Bitmap i zwrócić je do obszaru roboczego wygląda następująco:Jak zwiększyć wydajność w stosunku do DrawImage GDI (nieskalowane)?

C# wersja:

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

wersja 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 

Kod działa poprawnie, ale zaczyna się trząść, gdy do kolekcji dołącza się kilkanaście obiektów. Moje pytanie brzmi: czy istnieje sposób na przyspieszenie tego? Czy byłoby możliwe użycie funkcji Win32 bitblt do zastąpienia DrawImageUnscaled? A jeśli tak, to w jaki sposób?

Dzięki!

Uwaga: Googling dla useage z BitBlt przyniosła mi tylko próbki mocujące ekran tak daleko ...

+0

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

Odpowiedz

6

zbyt późno, ale może ktoś jeszcze potrzebne jest rozwiązanie.

Utworzyłem małą GLGDI Biblioteka +, gdzie podobne GDI + składni, które poruszają się po OpenTK: http://code.google.com/p/glgdiplus/

nie jestem pewien o stabilności, ma pewne problemy ze sznurkiem (problem z TextPrint od OpenTK). Ale jeśli potrzebujesz zwiększenia wydajności swojego narzędzia (np. Edytor poziomów w moim przypadku), może to być rozwiązanie.

+0

Bardzo interesujące. Spojrzę na to. Dzięki. –

Powiązane problemy