Как увеличить производительность по поводу увеличения GDI (не хватает)?

StackOverflow https://stackoverflow.com/questions/2587911

Вопрос

В моем обработке краски управления пользователя I повторяю набор предварительно определенных битовых объектов и при этом рисую их в область клиента:

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

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

Спасибо!

ПРИМЕЧАНИЕ. Googling для useage of Bitblt дал мне только образцы крышки экрана ...

Это было полезно?

Решение

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

Я создал небольшую библиотеку GLGDI + с Similiar GDI + синтаксисом, который работает на Opentk:http://code.google.com/p/glgdiplus/

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top