2010-04-06 43 views
5

在我的用户控件的油漆处理我遍历预定义的位图对象的集合,并将其绘制到客户区正是如此:如何通过GDI的DrawImage(非标定)提高性能?

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?如果是的话如何?

谢谢!

注:谷歌搜索的BitBlt的使用率只取得了我的屏幕帽样品至今...

+0

ping back @ http://stackoverflow.com/questions/264720/gdi-graphicsdrawimage-really-slow – dankyy1 2010-08-16 11:14:16

回答

6

太晚了,但可能有人仍然需要一个解决方案。

我已经创建,有着相近GDI +语法,这在OpenTK经营的小型图书馆GLGDI +: http://code.google.com/p/glgdiplus/

我不知道有关的稳定性,它有一些问题,通过DrawString(问题TextPrint从OpenTK)。但是如果你的实用程序需要性能提升(比如我的情况下的关卡编辑器),它可以是解决方案。

+0

非常有趣。我会看一看。谢谢。 – 2011-03-15 22:19:05