我正在尝试使用以下功能在屏幕上截取某个区域:
void ScreenShot(POINT leftTop, POINT rightBottom) {
int width = abs(rightBottom.x - leftTop.x);
int height = abs(rightBottom.y - leftTop.y);
cout << "w: " << endl << width << endl << "h: " << endl << height << endl;
// copy screen to bitmap
HDC hScreen = GetDC(NULL);
HDC hDC = CreateCompatibleDC(hScreen);
HBITMAP hBitmap = CreateCompatibleBitmap(hScreen, width, height);
HGDIOBJ old_obj = SelectObject(hDC, hBitmap);
BOOL bRet = BitBlt(hDC, 0, 0, width, height, hScreen, leftTop.x, leftTop.y, SRCCOPY);
// save bitmap to clipboard
OpenClipboard(NULL);
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBitmap);
CloseClipboard();
// clean up
SelectObject(hDC, old_obj);
DeleteDC(hDC);
ReleaseDC(NULL, hScreen);
DeleteObject(hBitmap);
}
但是当将剪贴板的内容粘贴到例如绘画中时,会产生黑色图像。图像具有作为参数传递的正确尺寸。我无法弄清楚这里有什么问题。
编辑:黑色图片只是屏幕截图尺寸不明显的结果,它仅拍摄了我屏幕黑色部分的截图。目前正在试图找出我使用的错误变量。编辑2:我发现了问题,我尝试截屏的应用程序窗口的某些内容已按比例放大。因此,我从它获得的矩形实际上小于应用程序窗口本身。因此,使用该rect的屏幕截图并不代表整个应用程序窗口。