【问题标题】:If a DibSection is independent of any device, why does it need a device context?如果 DibSection 独立于任何设备,为什么它需要设备上下文?
【发布时间】:2019-01-16 08:44:20
【问题描述】:

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

  • CreateBitmap:创建一个与设备相关的位图(它最好与您最终打算使用它的设备兼容)
  • CreateCompatibleBitmap:创建设备相关位图(与您提供的 DC 兼容)
  • CreateDIBitmap:创建与设备相关的位图,但允许您指定与设备无关的位以使用1(功能上相当于调用CreateCompatibleBitmap + SetDIBits)
  • CreateDIBSection创建一个独立于设备的位图(但我必须提供一个 DC?)

CreateCompatibleBitmap 需要hdc 参数是有道理的:它必须知道要与哪个 DC 兼容。

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

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

为什么 CreateDIBSection 使用设备上下文句柄?

创建DIBSection函数

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

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

DIB 是怎么回事?

奖金问题

问。 CreateBitmap 是怎么回事?

A.由您来确保它兼容。祝你好运!或者您可以只使用 CreateCompatibleBitmap

阅读奖励

【问题讨论】:

  • @JonathanPotter 如果iUsageTBD
  • HDC 在使用 DIB_PAL_COLORS 时是必需的,如文档所述。否则它是可选的。
  • 这些功能可以追溯到石器时代,当时视频适配器只能显示 16 或 256 色,没有人能负担得起足够的 RAM 来创建 24bpp 位图。一个 640x480x3 的位图占用 900KB,而您只有 640 个。您当前的桌面墙纸位图占用的空间比当时安装的整个操作系统还要多。调色板不是可选的,所以 HDC 不是。是时候继续前进了,GDI+ 已经存在 20 年了。
  • CreateDIBSection 工作,如果你通过NULLHDC,你可以简单地通过尝试来证明这一点。但它没有这样记录,所以我不确定你在寻找什么答案,除非来自微软的有权访问源代码的人想要权衡。

标签: winapi gdi


【解决方案1】:

答案似乎是:

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

【讨论】:

    猜你喜欢
    • 2021-10-29
    • 1970-01-01
    • 2021-11-03
    • 2017-10-13
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    相关资源
    最近更新 更多