Как повысить производительность по сравнению с DrawImage GDI (без масштабирования)?

В обработчике рисования моего пользовательского элемента управления я перебираю коллекцию предопределенных объектов Bitmap и рисую их в клиентской области следующим образом:

Версия C #:

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:

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

Код работает нормально, но начинает тормозить, когда в коллекцию добавляется около дюжины объектов. Мой вопрос: есть ли способ ускорить это? Можно ли использовать функцию Win32 bitblt для замены DrawImageUnscaled? И если да, то как?

Спасибо!

Примечание: поиск в Google для использования BitBlt пока дал мне только образцы экранных шапок ...


person Paul Sasik    schedule 06.04.2010    source источник
comment
ответьте на ping @ stackoverflow.com/questions/264720/   -  person dankyy1    schedule 16.08.2010


Ответы (1)


Слишком поздно, но, возможно, кому-то еще нужно решение.

Я создал небольшую библиотеку GLGDI + с похожим синтаксисом GDI +, которая работает на OpenTK: http://code.google.com/p/glgdiplus/

Насчет стабильности не уверен, есть проблемы с DrawString (проблема с TextPrint из OpenTK). Но если вам нужно повысить производительность вашей утилиты (например, редактора уровней в моем случае), это может быть решением.

person user446264    schedule 13.09.2010
comment
Очень интересно. Я взгляну. Спасибо. - person Paul Sasik; 16.03.2011