GetDIBits 将位图数据从屏幕兼容的设备上下文获取到特定格式的DIB。我当时的印象是,只有当源位图为每像素8位或更少时,DC才是合成颜色表所必需的。因为我的源位图是一个完整的32位彩色图像,这是一个一次性的程序,而且我手头没有屏幕DC,所以我将HDC参数设置为空。这没用。一旦我抓起屏幕上的DC并把它传进来,它就开始工作了。
GetDIBits
这让我想知道为什么 需要设备上下文。它是用来干什么的?
在:
int SetDIBits( __in HDC hdc, __in HBITMAP hbmp, __in UINT uStartScan, __in UINT cScanLines, __in const VOID *lpvBits, __in const BITMAPINFO *lpbmi, __in UINT fuColorUse );
第二个论点 hbmp 是将使用设备无关位图中的颜色信息进行更改的设备相关位图。这个 hdc 是此(设备相关)位图所依赖的设备上下文的句柄。调用时,Windows使用来自此设备上下文的信息来决定如何执行转换。
hbmp
hdc