使用单个结构(BITMAP 结构)描述设备依赖位图(DDB)。 此结构的成员指定矩形区域的宽度和高度(以像素为单位);将条目从设备调色板映射到像素的数组的宽度;以及设备的颜色格式,以每像素的颜色平面和位为单位。 应用程序可以通过调用 GetDeviceCaps 函数并指定适当的常量来检索设备的颜色格式。 请注意,DDB 不包含颜色值;相反,颜色采用与设备相关的格式。 有关详细信息,请参阅位图 中的颜色。 由于每个设备可以有自己的颜色集,因此为一台设备创建的 DDB 可能无法在不同的设备上很好地显示。
若要在设备上下文中使用 DDB,它必须具有该设备上下文的颜色组织。 因此,DDB 通常称为 兼容的位图,并且通常比 DIB 更好的 GDI 性能。 例如,若要为视频内存创建位图,最好使用与主显示器相同的颜色格式的兼容位图。 在视频内存中后,呈现到位图并将其显示到屏幕的速度明显快于从系统内存图面或直接从 DIB 显示。
除了启用更好的 GDI 性能外,兼容的位图还用于捕获图像(请参阅 捕获图像),并在运行时为菜单创建位图,请参阅“创建位图”(请参阅 使用菜单)。
若要在不同颜色组织的设备之间传输位图,请使用 GetDIBits 将兼容的位图转换为 DIB,并调用 SetDIBits 或 StretchDIBits 将 DIB 显示给第二台设备。
有两种类型的 DDB:可丢弃和不可显示。 可丢弃的 DDB 是一个位图,如果位图未选择到 DC,并且系统内存较低,则系统会放弃该位图。 CreateDiscardableBitmap 函数创建可丢弃的位图。 CreateBitmap、CreateCompatibleBitmap,CreateBitmapIndirect 函数创建不可显示位图。
应用程序可以通过初始化所需的结构并调用 CreateDIBitmap 函数,从 DIB 创建 DDB。 在调用 CreateDIBitmap 中指定CBM_INIT相当于调用 CreateCompatibleBitmap 函数以设备格式创建 DDB,然后调用 SetDIBits 函数将 DIB 位转换为 DDB。 若要确定设备是否支持 SetDIBits 函数,请调用 GetDeviceCaps 函数,并将RC_DI_BITMAP指定为 RASTERCAPS 标志。