MSDN表示在调用此函数之前,不应将GetDiBits
中使用的位图选入DC。但根据我的经验(使用BitBlt
),我知道除非选择了位图,否则我无法绘制位图。
GetDiBits
如何绕过这个?我可以使用未选择的,新创建的位图作为此函数的参数吗? GetDiBits
以及CreateDibSection
返回一个数组。但是MSDN谈到了第一个功能:
“指定兼容位图的位”
我认为DI代表DeviceIndependent。为什么会出现矛盾?这意味着,根据MSDN,GetDiBits
只能与CreateCompatibleBitmap
(DD)一起使用?然后我不能将这个数组发送到另一台机器来显示它,对吗?
CreateDibSection
真的是DIndependent,为什么它需要一个hDC?所有需要的信息都是通过bitmapinfoheader ... 答案 0 :(得分:5)
- 除非选中,否则我无法绘制位图。 GetDiBits如何绕过这个?
醇>
GetDIBits不做任何绘图。它从位图读取像素数据并将其转换为所需的颜色格式。 SetDIBits没有"画"或者,它会将像素数据设置在位图中。
- 命名混乱。
醇>
GetDIBitmap中的DI指的是像素数据以与设备无关的格式返回这一事实(特别是您要求的格式)。源位图可以是兼容的位图或与设备无关的位图。
类似地,SetDIBitmap采用与设备无关的像素数据并将其转换为目标位图的类型。
这些功能令人困惑。
- DC的用途是什么?
醇>
DC用于回答有关设备上像素格式的任何问题。例如,如果源格式是基于调色板的设备相关位图,则GetDIBits将假定选择到DC中的调色板是正确的。请注意,调色板不在BITMAPINFOHEADER中。
CreateDIBSection创建一个混合位图,用于在与设备无关的方法中存储数据,但也可以保持与设备相关的副本与其同步以提高性能。所以它需要知道目标设备的DC。