当前位置:编程学习 > C#/ASP.NET >>

关于DIB的输出方式

答案: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.

不知道这篇小心得对大家有没有用,有用的话说一声,谢了~呵呵~

上一个:Mono问题之一——中文支持
下一个:IssuVision是怎样完成观察器模式的注册和通知的

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,