创建位图时,您有四个选择:
- CreateBitmap:创建一个设备相关位图(并且它最好与您最终打算在其上使用的设备兼容)
- CreateCompatibleBitmap:创建一个设备相关位图(与您提供的DC兼容)
- CreateDIBitmap:创建一个设备相关位图,但让您指定设备无关位来初始化位图1(功能上等同于调用CreateCompatibleBitmap+SetDIBits)
- CreateDIBSection:创建一个设备无关位图(但我必须提供一个DC?)
很容易理解为什么CreateCompatibleBitmap需要一个hdc
参数:它需要知道与哪个DC兼容。
注意:不明白为什么CreateBitmap不需要hdc
。它怎么知道要兼容哪个DC?CreateBitmap不需要DC,也不知道要兼容哪个DC。这是你的工作。而且你最好确保它与你最终打算使用的DC兼容。
为什么CreateDIBSection需要一个设备上下文句柄?
CreateDIBSection函数
CreateDIBSection函数创建一个应用程序可以直接写入的DIB。该函数会给您指向位图位值位置的指针。您可以提供文件映射对象的句柄,函数将使用该对象来创建位图,或者您可以让系统为位图分配内存。
| Function | Type | Takes hdc |
|------------------------|------|-----------|
| CreateBitmap | DDB | No |
| CreateCompatibleBitmap | DDB | Yes |
| CreateDIBitmap | DDB | Yes |
| CreateDIBSection | DIB | Yes |
DIB是什么意思?
奖励问题
问: CreateBitmap是什么?
答:你需要确保它兼容。祝你好运!或者,你可以使用CreateCompatibleBitmap
额外阅读
- Raymond Chen的《新旧事物》: 具有预定义数据的GDI位图创建的各种方法的调查。这是一个关于在GDI中创建位图的不同方法的优秀解释。
iUsage
是TBD
呢? - Ian BoydDIB_PAL_COLORS
时,HDC
是必需的,正如文档所述。否则它是可选的。 - Jonathan PotterHDC
参数中传递了NULL
,那么CreateDIBSection
函数会正常工作。您可以通过简单尝试来实现这一点。但是,这并未被记录在文档中,因此我不太确定您在答案中要找什么,除非有Microsoft的某位拥有源代码访问权限的人想要参与讨论。 - Jonathan Potter