如果DibSection独立于任何设备,为什么它需要设备上下文?

时间:2018-08-09 01:19:47

标签: winapi gdi

创建位图时,您有三个四个选择:

  • CreateBitmap:创建与设备有关的位图(并且最好与最终打算在其上使用它的设备兼容)
  • CreateCompatibleBitmap:创建与设备有关的位图(与您提供的DC兼容)
  • CreateDIBitmap :创建与设备有关的位图,但允许您指定与设备无关的位以使用 1 < em>(在功能上等同于调用 CreateCompatibleBitmap + SetDIBits
  • CreateDIBSection 创建独立于设备的位图(但是我必须提供DC吗?)

CreateCompatibleBitmap 为什么需要一个hdc参数是很有意义的:它必须知道要与哪个DC兼容。

  

注意:为什么 CreateBitmap 使用hdc是没有道理的。它怎么知道要与哪个DC兼容?

     

CreateBitmap 不需要DC,并且不知道要兼容的DC。那是你的工作。并且最好确保它与您最终打算使用它的DC兼容。

为什么 CreateDIBSection 处理设备上下文?

  

CreateDIBSection函数

     

CreateDIBSection函数创建一个DIB,应用程序可以直接写入该DIB。该函数为您提供一个指向位图位值位置的指针。您可以为函数将用于创建位图的文件映射对象提供句柄,也可以让系统为位图分配内存。

| Function               | Type | Takes hdc |
|------------------------|------|-----------|
| CreateBitmap           | DDB  | No        |
| CreateCompatibleBitmap | DDB  | Yes       |
| CreateDIBitmap         | DDB  | Yes       |
| CreateDIBSection       | DIB  | Yes       |

与DIB有什么关系?

奖金问题

问。 CreateBitmap 有什么用?

A。您需要确保它的兼容性。祝好运!或者,您可以只使用 CreateCompatibleBitmap

奖金阅读

1 个答案:

答案 0 :(得分:0)

答案似乎是:

  • 仅在n_rows时才需要hdc
  • 否则(即usage = DIB_PAL_COLORS),则usage = DIB_RGB_COLORS 可能是可选的