DIB,设备无关位图。既然设备无关了,我们要输出它就有了一些困难,毕竟在屏幕上能看到的都是设备场景中的图像。那么要怎样输出它呢?
1、半随机显示——SetDIBitsToDevice
是的,该API实现的输出是半随机化的。简单的说,用这个函数输出的图片我们能够看到,但是它是不会被保存的,即使在VB中开启了AutoRedraw也一样。根据我的猜想,这个函数的实际功能非常简单,将一幅图片画到一个设备场景所在的区域,设置不经过这个hDC本身的管理。
那么根据现象以及由现象推出的本质,这个函数对我们来说只有一个优点:性能较高。但实际使用中的现象并非如此,该函数输出一幅640x480的位图平均需要6ms左右,如果你使用过Bitblt函数,你会发现,这个操作的效率是如此之低,甚至不如设备场景间的图片传递。这是为什么?原因很简单,DIB的转换。的确,SetDIBitsToDevice是直接将图像画到hDC中,但是这个过程却一定要把DIB的数据转换成hDC兼容的格式(就是hDC的图片格式本身),然后再绘出。所以要提高SetDIBitsToDevice的执行性能,首先你创建的位图最好符合你预期要输出到的hDC的格式。
P.S.我很奇怪这个函数为什么要这样设计,因为它是不能保存改变的,即使用在打印hDC中也不能使得输出内容被打印出来。这个,希望有高手来解答了。
2、稳定化输出:CreateDIBitmap
这个函数简单得多。你给出一个DIB,他负责把内容copy下来,然后“封装”为一个hBitmap对象。你可以使用任何你想得到的方法对这个对象进行处理,根据我的实验,多数都是成功的。
不过千万不要妄想使用这个hBitmap对象进行原DIB的输入操作。除非你用它创建了一个兼容的hDC,并且没有把这个hBitmap选入任何hDC对象。
3、随机输出:DirectX
这个很高深。为什么这么说?因为你要手动进行好多转换,然后以占用至少30MB内存为代价,来实现动态图像的极连贯的输出。在这里我不做详细介绍了,本人水平有限,正在研究这个东东。同样的,希望来个谁帮帮偶~
Over.
不知道这篇小心得对大家有没有用,有用的话说一声,谢了~呵呵~