在用户控件的绘制处理程序中,我遍历预定义的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?如果是这样怎么办?

谢谢!

注意:到目前为止,使用BitBlt进行谷歌搜索仅给我提供了屏幕截图示例...

最佳答案

为时已晚,但可能仍然有人需要解决方案。

我使用类似的GDI +语法创建了小型库GLGDI +,该语法在OpenTK上运行:
http://code.google.com/p/glgdiplus/

我不确定稳定性,它与DrawString有关(OpenTK的TextPrint有问题)。但是,如果您需要提高实用程序的性能(例如本例中的关卡编辑器),则可以找到解决方案。

10-07 23:10