[英]BitBlt captures only partial screen
我试图在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)
的32x32 px矩形捕获到位图中并将其绘制到屏幕上(左上角)。
然而,这导致大多数黑色方块。 只有在被捕获之前由GDI绘制的东西才被捕获。 我很确定第一个BitBlt
是问题所在。 如果我将WHITENESS
指定为最后一个参数,我会得到一个白色正方形,这是我所期望的。 因此从屏幕到位图的捕获似乎是有问题的。
如果我直接从屏幕复制到屏幕使用
BitBlt(desktop, 0, 0, 32, 32, desktop, sourceX, sourceY, SRCCOPY);
一切都按预期工作。
我也尝试过CAPTUREBLT
旗帜。
如何将整个区域捕获到位图中?
这条线
HBITMAP captureBmp = CreateCompatibleBitmap(hCaptureDC, 32, 32);
应该
HBITMAP captureBmp = CreateCompatibleBitmap(desktop, 32, 32);
原因在CreateCompatibleBitmap
的文档页面上解释:
创建存储设备上下文时,它最初会选择1×1的单色位图。 如果在CreateCompatibleBitmap中使用此内存设备上下文,则创建的位图是单色位图。 要创建颜色位图,请使用用于创建存储设备上下文的HDC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.