我试图在Windows 10下使用GDI捕捉屏幕的正方形部分。
//Get screen DC
desktop = GetDC(NULL);
//Create a compatible bitmap of 32 x 32 px.
HDC hCaptureDC = CreateCompatibleDC(desktop);
HBITMAP captureBmp = CreateCompatibleBitmap(hCaptureDC, 32, 32);
SelectObject(hCaptureDC, captureBmp);
//loop:
BitBlt(hCaptureDC, 0, 0, 32, 32, desktop, sourceX, sourceY, SRCCOPY);
BitBlt(desktop, 0, 0, 32, 32, hCaptureDC, 0, 0, SRCCOPY);因此,我在(sourceX, sourceY)上捕获了一个32x32px矩形,并将其绘制到屏幕上(左上角)。
然而,这导致了大部分黑色方块。只有GDI在被捕获之前画出的东西。我确信第一个BitBlt就是问题所在。如果我指定WHITENESS作为最后一个参数,我就会得到一个白色的正方形,这正是我所期望的。所以从屏幕到位图的捕获似乎是有问题的。
如果我直接从屏幕复制到屏幕,则使用
BitBlt(desktop, 0, 0, 32, 32, desktop, sourceX, sourceY, SRCCOPY);一切都如预期的那样运作。
我也尝试了旗子CAPTUREBLT。
如何将整个区域捕获到位图中?
发布于 2015-11-12 10:55:27
这条线
HBITMAP captureBmp = CreateCompatibleBitmap(hCaptureDC, 32, 32);应该是
HBITMAP captureBmp = CreateCompatibleBitmap(desktop, 32, 32);在文件页 for CreateCompatibleBitmap中解释了原因:
当内存设备上下文被创建时,它最初有一个1×1的单色位图。如果在CreateCompatibleBitmap中使用此内存设备上下文,则创建的位图是单色位图。若要创建颜色位图,请使用用于创建内存设备上下文的HDC。
https://stackoverflow.com/questions/33669344
复制相似问题