在C ++代码中,我需要截取给定窗口的屏幕截图,将像素存储在内存中,然后将它们加载到SFML Image对象中。到目前为止,我有一个窗口的句柄,我需要截屏,并可以创建它的HBITMAP对象:
HWND window = FindWindow(TEXT("WindowName"), NULL);
RECT rc;
GetClientRect(window , &rc);
HBITMAP hbmp;
HDC hdcScreen = GetDC(NULL);
HDC hdc = CreateCompatibleDC(hdcScreen);
hbmp = CreateCompatibleBitmap(hdcScreen,
rc.right - rc.left, rc.bottom - rc.top);
SelectObject(hdc, hbmp);
PrintWindow(window, hdc, PW_CLIENTONLY);
GetObject(hbmp, sizeof(BITMAP), bitmap);
说实话,我并不是一个Windows家伙,我不明白这个WinAPI的真正发生了什么,这只是我在网上发现的一些代码获取截图。我需要做的是将其转换为某些类型的标准格式,我可以将其传递给SFML的函数:
sf::Image::loadFromMemory(const void * data, std::size_t size)
最好是稍后也可以通过套接字连接轻松发送的东西。如何为我的屏幕截图获取一个漂亮的,非特定于Windows的格式?