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