屏幕截图的结果为black image(Winapi)

时间:2017-03-19 21:01:35

标签: c++ winapi screenshot

我正在尝试使用以下功能在屏幕上截取某个区域:

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的屏幕截图并不代表整个应用程序窗口。

0 个答案:

没有答案