将Windows屏幕截图加载到SFML图像中

时间:2015-07-14 21:22:04

标签: c++ windows winapi bitmap sfml

在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的格式?

0 个答案:

没有答案