VB哪个函数或程序画图最快呢?解决办法
VB哪个函数或程序画图最快呢?我用FORM自带的PAINTPICTURE,非常慢,有类似的API比较快,而且可以平铺图片吗?[
VB哪个函数或程序画图最快呢?
我用FORM自带的PAINTPICTURE,非常慢,有类似的API比较快,而且可以平铺图片吗?
[解决办法]
PAINTPICTURE应该不慢,除非你循环调用个成千上万下.
类似的API有: BITBLT, TRANSPARENTBLT, StretchBlt等等
[解决办法]
可以考虑刷子,先建立一个区域,然后选择刷子,然后用刷子填充该区域。
[解决办法]
还有,图形上处理慢的原因估计是你用的是你把AutoRedraw设置为True,然后进行绘制过程。
这样效率会降低很多。因为你没做一个动作它都会记忆一次,并且刷新到窗口上显示出来。
如果你要进行平铺50张图片,那么就会记忆和刷新50次,效率肯定不会高。
通常的做法应该是将要处理的过程在内存中直接处理好,然后再刷新窗口显示出来。对于图形而言,
通常使用GDI或GDI+或DirectX来做这些事。比较符合Windows习惯的做法就是GDI。
GDI是一系列的API函数,通常GDI函数是指调用gdi32.dll里的API函数。比如楼上所说的BitBlt
函数和StretchBlt函数都属于标准的GDI函数。
但即使是GDI的API函数,如果使用的方法不对也是不能提高效率的,比如如果还是按照绘制一张图
就刷新到窗口上显示出来,速度也不会提高多少,因为还是经过了平凡的显示着一块,这是很浪费资
源的操作(在重复多次操作中特别明显)。所以需要在内存中直接处理重复的这些操作,然后可以在
处理完成后一次刷新结果到窗口上,这样效果会好很多。
不知道你有没有看过用GDI方法开发的游戏,大致就是这么一个过程,因为在频繁的图片绘制中,如果
每一个小图片或小标志都要刷新一次窗口显示出来,那个游戏肯定没法玩下去,呵呵。
而这种所谓在内存的处理方法其实就是建立一个内存里的GDI设备来完成,这个GDI设备就像PictureBox
的hDC设备,但是他和不关联窗口(当然可以做关联窗口的设备),所以在这种设备绘制完不会显示出来,
如果要显示这个设备的内容,那么就把这个设备的内容整个绘制到你要显示的设备上就可以了。
就你的需求来说其实就像我上面所说的,用区域的方式以刷子填充还是比较快的,至于如何实现,你可以
参考以下几个GDI函数:
CreateRectRgn
CreateEllipticRgn
CreatePolygonRgn
CreatePolyPolygonRgn
FillRgn
PaintRgn
SelectObject
DeleteObject
CreatePatternBrush
CreateDIBSection
CreateCompatibleDC
DeleteDC
这些GDI函数使用起来也不难,在网上可以查一下使用方法应该可以做出你想要的效果了
[解决办法]
[解决办法]关键要考虑绘图速度和刷新频率。
1)如果绘图比较慢。
比如很复杂的图,要用 0.1 秒才能画出来,那么中间过程肉眼能够看到,用双缓冲(AutoRedraw = True)就能避免视觉滞留导致的闪烁。
2)如果绘图很快,刷新适中。
比如频率为 20 帧/秒,每帧只要 0.001 秒就可以画完,那么不用缓冲直接绘制(AutoRedraw = False)最合适。
3)如果刷新过快。
还是 0.001 秒画完 1 帧,但是频率为 1000 帧/秒,远高于一般显示器的刷新频率,大部分帧根本没机会显示到屏幕上;而且无论是否用缓冲,过量的刷新事件会拖慢整个程序的响应速度。
[解决办法]一般的Bitblt就行了,比那个PaintPicture快多了。
还想再快就要用Direct3D 或者 DirectDraw了。
[解决办法][解决办法]关键是 penguinhzf 实测 1 次绘图用时多少?
需求决定方案,没有前提单纯讨论哪种方案好是没意义的。