forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.4 KiB
63 lines
1.4 KiB
#pragma once |
|
|
|
#include "Capture.h" |
|
|
|
class GDICapture : public Capture { |
|
public: |
|
void init(UINT monitorID, RECT screen) |
|
{ |
|
this->screen = screen; |
|
hdc = GetDC(NULL); // get the desktop device context |
|
hDest = CreateCompatibleDC(hdc); // create a device context to use yourself |
|
|
|
// get the height and width of the screen |
|
height = screen.bottom - screen.top; |
|
width = screen.right - screen.left; |
|
|
|
int virtualScreenHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN); |
|
int virtualScreenWidth = GetSystemMetrics(SM_CXVIRTUALSCREEN); |
|
|
|
// create a bitmap |
|
hbDesktop = CreateCompatibleBitmap( hdc, virtualScreenWidth, virtualScreenHeight); |
|
|
|
// use the previously created device context with the bitmap |
|
SelectObject(hDest, hbDesktop); |
|
|
|
bmi.bmiHeader.biSize = sizeof(bmi.bmiHeader); |
|
bmi.bmiHeader.biWidth = width; |
|
bmi.bmiHeader.biHeight = -height; |
|
bmi.bmiHeader.biPlanes = 1; |
|
bmi.bmiHeader.biBitCount = 32; |
|
bmi.bmiHeader.biCompression = BI_RGB; |
|
|
|
pPixels = new RGBQUAD[width * height]; |
|
|
|
} |
|
int getNextFrame(RGBQUAD** data) |
|
{ |
|
// copy from the desktop device context to the bitmap device context |
|
BitBlt( hDest, 0,0, width, height, hdc, screen.left, screen.top, SRCCOPY); |
|
|
|
GetDIBits( |
|
hDest, |
|
hbDesktop, |
|
0, |
|
height, |
|
pPixels, |
|
&bmi, |
|
DIB_RGB_COLORS |
|
); |
|
*data = pPixels; |
|
return 0; |
|
} |
|
void doneNextFrame() |
|
{ |
|
} |
|
private: |
|
HDC hdc, hDest; |
|
int width, height; |
|
RECT screen; |
|
RGBQUAD *pPixels; |
|
HBITMAP hbDesktop; |
|
BITMAPINFO bmi; |
|
}; |