请问StretchBlt和StretchDIBits有什么不同?(200分)

  • 主题发起人 主题发起人 ccw128
  • 开始时间 开始时间
C

ccw128

Unregistered / Unconfirmed
GUEST, unregistred user!
如果我有一个Bitmap是pf24bit格式的,那么调用StretchBlt和StretchDIBits有什么不同?
 
哪儿有StretchDIBits函数?
 
Windows API
 
首先明确 :
DIB(Device-indepentent bitmap)是与设备无关的位图

1、DIB的颜色模式与设备无关。
例如,一个256色的DIB即可以在真彩色显示模式下使用,也可以在16色模式下使用。

2、256色以下(包括256色)的DIB拥有自己的颜色表,像素的颜色独立于系统调色板。

而我们通常所说的是依赖于设备的位图。

可以来这里看看:http://images.163.com/images/it/books/vc/chap11/chap11_3.htm
http://images.163.com/images/it/books/vc/chap11/chap11_4.htm

明白了以上的区别,就不难理解StretchBlt和StretchDIBits的差异了。


 
谢谢老大讲课!:)
不过还是不太明白:(
 
好像没的说了啊,
StretchBlt 将一幅位图从一个设备场景复制到另一个设备场景
StretchDIBits 将一幅与设备无关位图的全部或部分数据直接复制到指定的设备场景

在Windows中可以将预先准备好的图像复制到显示区域中,
这种内存拷贝执行起来是非常快的。在Windows中提供了两种使用图形拷贝的方法:
通过设备相关位图(DDB)和设备无关位图(DIB)。

在使用DIB位图时我们需要自己读取位图文件中的头信息,并读入数据,
并利用API函数StretchDIBits绘制。
 
to 卷起千堆雪tyn:
多谢您的回答,根据您所说的,是否表明用StretchBlt可能会导致复制后的图象失真。而
StretchDIBits则不会?
 
我们这么来理解:
DIB是与设备无关位图,而DDB是与设备相关位图。
比如拿显示器来说,你一幅DDB24位真彩图在256色下,会变得斑驳陆离,
这就是由显示器显示模式决定的,就是与设备相关;
而一幅DIB真彩位图在256色下,仍然如初,就是与设备无关。

所以以StretchBlt操作的位图在不同显示模式下会有不同的效果,
而以StretchDIBits操作的位图则不存在依赖显示模式而改变的现象。
所以也可以理解成为失真与不失真的概念。
 
>而一幅DIB真彩位图在256色下,仍然如初,就是与设备无关。
不懂。那256色的情况下是如何显示DIB真彩位图呢?
 
StretchDIBits怎么用呢?老大,是不是效率比StretchBlt高?
 
后退
顶部