【发布时间】:2016-02-13 15:41:02
【问题描述】:
我正在尝试在 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 像素矩形捕获到位图中,并将其绘制到屏幕上(左上角)。
但是,这会导致大部分是黑色方块。只有 GDI 之前绘制的东西才会被捕获。我很确定第一个BitBlt 是问题所在。如果我指定WHITENESS 作为最后一个参数,我会得到一个白色方块,这正是我所期望的。所以从屏幕捕捉到位图似乎是有问题的。
如果我直接从一个屏幕复制到另一个屏幕使用
BitBlt(desktop, 0, 0, 32, 32, desktop, sourceX, sourceY, SRCCOPY);
,一切都按预期进行。
我也试过CAPTUREBLT这个标志。
如何将整个区域捕获到位图中?
【问题讨论】: