在VB.net中渲染到屏幕

时间:2011-06-24 13:20:13

标签: vb.net gdi+

我正在创建自己的2D引擎。我打算只使用.net绘图功能。但是,这非常慢,屏幕闪烁很多。我必须把它画到一个窗口,但是......

最好的方法是什么?我如何在这种情况下添加缓冲区?

1 个答案:

答案 0 :(得分:2)

假设您正在使用GDI,“屏幕”闪烁问题是由于直接在主表面上书写。您可以通过执行以下操作来创建“位图”缓冲区来避免这种情况:

Bitmap buffer = New Bitmap(Me.ClientSize.Width, Me.ClientSize.Height)

然后从该缓冲区创建托管“Graphics”对象,

Using gfx As Graphics = New Graphics.FromImage( buffer )

// draw with gfx object

End Using

要在主曲面上显示更新后的缓冲区,请执行以下操作:

PrimaryGraphics.DrawImageUnscaled(buffer,0,0)或者你可以P / Invoke“BitBlt”,我相信它会快一些。

如果您使用的是C#,我建议使用“不安全”的代码块直接通过指针来操作缓冲区,这样可以加快速度。但是,我不相信VB.net支持它们。

编辑:

GDI +并不会真正“快速”快速,无论是由于使用标准系统CPU /内存资源实现的方式。

你可以考虑使用SlimDX,它有一个围绕Direct2D的托管包装器,一个硬件加速的2D API。有一些tutorials可用于入门。

编辑2:

如果您坚持使用GDI,您可以在后台缓冲区上使用“LockBits”来执行一些“优化”的内存操作,here是一篇关于此主题的精彩文章。