c# - 如何提高 GDI 的 DrawImage(Unscaled) 的性能?

标签 c# vb.net performance bitblt drawimage

在我的用户控件的绘制处理程序中,我迭代了一组预定义的 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 有问题)。但是,如果您需要提高实用程序的性能(例如我的关卡编辑器),它可能是解决方案。

关于c# - 如何提高 GDI 的 DrawImage(Unscaled) 的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2587911/

相关文章:

c# - 在 C# 中将一个列表添加到另一个列表

c# - 如何将错误消息从 C# 发送到 Ajax 以在客户端使用此错误消息的内容?

c# - 访问未知类型的所有属性

regex - 需要在vb.net中解析一个字符串

java - 编译还是不编译模式?

java - 关于 String#substring() 方法

c# - 有条件地应用 Where(或在它们之间)LINQ

mysql - Vb.net Mysql 一份数据中多次查询

vb.net - 在获得焦点时显示组合框列表(vb.net)

java - 在java中用null填充ArrayList的最快方法是什么?