Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to increase performance over GDI's DrawImage(Unscaled)?

In my user control's paint handler I iterate over a collection of predefined Bitmap objects and draw them to the client area thusly:

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

The code works fine but starts to bog down when a dozen or so objects are added to the collection. My question is: Is there a way to speed this up? Would it be possible to use the Win32 bitblt function to replace DrawImageUnscaled? And if so how?

Thanks!

Note: Googling for useage of BitBlt has only yielded me screen cap samples so far...

like image 919
Paul Sasik Avatar asked Apr 06 '10 20:04

Paul Sasik


1 Answers

Too late, but possibly somebody still need a solution.

I've created small library GLGDI+ with similiar GDI+ syntax, which run upon OpenTK: http://code.google.com/p/glgdiplus/

I'm not sure about stability, it has some issues with DrawString (problem with TextPrint from OpenTK). But if you need performance boost for your utility (like level editor in my case) it can be solution.

like image 144
user446264 Avatar answered Oct 26 '22 23:10

user446264