5

在我的用户控件的绘制处理程序中,我迭代了一组预定义的 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 的使用只产生了我的屏幕截图样本......

4

1 回答 1

6

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

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

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

于 2010-09-13T12:23:53.863 回答