我想获得一部分屏幕的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);
为什么部分屏幕位出错?如果我进行全屏拍摄,它可以正常工作。