我目前正在使用以下代码行截取窗口:
UpdateWindow(hwnd);
HDC window_dc = GetDC(hwnd);
HDC res = CreateCompatibleDC(window_dc);
RECT r;
GetClientRect(hwnd, &r);
HBITMAP bmp = CreateCompatibleBitmap(window_dc, r.right - r.left, r.bottom - r.top);
SelectObject(res, bmp);
PrintWindow(hwnd, res, PW_CLIENTONLY);
DeleteObject(bmp);
ReleaseDC(hwnd, window_dc);
现在有没有办法只截取我的 HWND 的特定区域?我意识到,在某些应用程序中,当窗口稍微大一点时,屏幕截图会花费更长的时间。所以我想如果我能够只截取重要的帧,我真的可以提高我的速度。
编辑:它需要为处于后台的窗口工作,例如。被其他窗口重叠。
最佳答案
你可以这样试试:
bool ScreenShot(HWND hwnd, int x, int y, int w, int h, LPCSTR file){
HDC source = GetDC(hwnd);
HDC memory = CreateCompatibleDC(source);
HBITMAP bitmap = CreateCompatibleBitmap(source, w, h);
HBITMAP bitmapOld = (HBITMAP)SelectObject(memory, hBitmap);
BitBlt(memory, 0, 0, w, h, source, x, y, SRCCOPY);
hBitmap = (HBITMAP)SelectObject(memory, bitmapOld);
DeleteDC(source);
DeleteDC(memory);
HPALETTE pal = NULL;
if(saveBitmap(file, bitmap, pal)) return true;
return false;
}
关于c++ - 只截图窗口的特定区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27837364/