MSDN说,在调用此函数之前,不应该将GetDiBits中使用的位图选择到DC中。但是根据我的经验(使用BitBlt),我知道除非选择了位图,否则我无法绘制位图。
GetDiBits是如何规避这一问题的?我可以使用一个未选定的,新创建的位图作为这个函数的参数吗?GetDiBits以及CreateDibSection也返回一个数组。但是MSDN提到了第一个函数:
“指定兼容位图的位”我认为DI代表DeviceIndependent。为什么会有矛盾呢?这意味着,根据MSDN,GetDiBits只能与CreateCompatibleBitmap (即DD)一起使用?那么我就不能把这个数组发送到另一台机器来显示它,对吗?
CreateDibSection是真正的DIndependent,为什么它需要一个hDC?所有需要的信息都是通过位图信息头提供的.发布于 2018-04-11 21:07:55
GetDIBits不做任何绘图。它从位图中读取像素数据并将其转换为所需的颜色格式。SetDIBits也不会“绘制”,但是它会在位图中设置像素数据。
GetDIBitmap中的DI是指像素数据以独立于设备的格式返回的事实(具体来说,就是您所要求的格式)。源位图可以是兼容位图,也可以是与设备无关的位图.
类似地,SetDIBitmap接收与设备无关的像素数据,并将其转换为目标位图的类型。
这些函数的命名令人费解。
DC用于回答有关设备上像素格式的任何问题。例如,如果源格式是基于调色板的依赖于设备的位图,GetDIBits将假定在DC中选择的调色板是正确的。注意,调色板不在BITMAPINFOHEADER中。
CreateDIBSection创建了一个混合位图,该位图将数据存储在独立于设备的方法中,但也可能与设备相关的副本保持同步以提高性能。所以它需要知道目标设备的直流。
https://stackoverflow.com/questions/49784146
复制相似问题