win32

设备相关位图(DDB): 

  • DDB不包含颜色值,因为每个设备可以具有自己的一组颜色,所以为一个设备创建的DDB可能无法在其他设备上很好地显示。
  • DDB通常被称为兼容位图,并且它通常比DIB具有更好的GDI性能。(在视频存储器上创建DDB)
  • DDB有两种类型:可丢弃和不可丢弃。可丢弃的DDB是一种位图,如果未将位图选择到DC中且系统内存不足,则系统会将其丢弃。
  • 应用程序可以通过初始化所需的结构并调用CreateDIBitmap函数从DIB创建DDB 

设备无关位图(DIB):

  • DIB包含一个颜色表表描述像素值如何与RGB颜色值对应,后者描述通过发光产生的颜色。因此,DIB可以在任何设备上实现正确的配色方案。
  • DIB的颜色和尺寸信息存储在BITMAPINFO结构中,该结构由BITMAPINFOHEADER结构和后面的两个或多个RGBQUAD结构组成。
  • 通过初始化所需的结构并调用GetDIBits函数,应用程序可以从DDB创建DIB 。(要确定设备是否支持此功能,请调用GetDeviceCaps函数,将RC_DI_BITMAP指定为RASTERCAPS标志)
  • 应用程序可以通过调用SetDIBitsToDeviceStretchDIBits函数,使用DIB设置显示设备上的像素。(若要确定设备是否支持SetDIBitsToDevice函数,请调用GetDeviceCaps函数,并将RC_DIBTODEV指定为RASTERCAPS标志)

小结: DIB所需要的知识面比DDB要广的多,光靠看文档是远远不够的。 我们需要通过相关的例子来学习它。 不过DDB与DIB的存在感很低,我们也很少遇到相关的问题,即使遇到也不会过于复杂。所以我们只需要记住两者最重要的区别,DIB可以在不同设备之间传输,并且很好的显示色彩,因为它自身包含颜色表,而DDB依托设备的颜色表,所以可能在其他设备上显示效果不会很好。

原文地址:https://www.cnblogs.com/strive-sun/p/14116095.html