CreateDIBSection获取部分屏幕

时间:2015-05-08 03:41:54

标签: winapi screenshot

我想获得一部分屏幕的uint8_t []。左上角的xy坐标为2,3,右下角的xy坐标为17,18。

这是我屏幕的前30x30像素,带有常规屏幕截图和photoshop裁剪:

这就是2,3到17,18截图应该通过常规屏幕截图和Photoshop裁剪看起来像:

这是我的代码所得到的结果:

我的代码在js-ctypes中,但没有ctypes错误。这是一个winapi的事情。所以我没有用ctypes标记它,因为它们会被混淆。这是我正在使用的简化代码,错误检查等已被删除:

c1 = {x:2, y:3} // top left corner
c2 = {x:17, y:18} // bottom right corner

CreateDC('DISPLAY', null, null, null);
nBPP = GetDeviceCaps(hdcScreen, BITSPIXEL);

w = c2.x - c1.x; // width = 15
h = c2.y - c1.y; // height = 15

hdcMemoryDC = CreateCompatibleDC(hdcScreen);

bmi = BITMAPINFO();
bmi.bmiHeader.biSize = BITMAPINFOHEADER.size;
bmi.bmiHeader.biWidth = w;
bmi.bmiHeader.biHeight = -1 * h;
bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = nBPP; // nBPP is 32
bmi.bmiHeader.biCompression = BI_RGB;

hbmp = CreateDIBSection(hdcScreen, &bmi, DIB_RGB_COLORS, (void**)&pixelBuffer, null, 0);

SelectObject(hdcMemoryDC, hbmp);
BitBlt(hdcMemoryDC, 0, 0, w, h, hdcScreen, c1.x, c1.y, SRCCOPY);

为什么部分屏幕位出错?如果我进行全屏拍摄,它可以正常工作。

0 个答案:

没有答案