我通过执行以下操作获得了截图:
long tmp_len_square[N*3];
for (int j = 0; j < N; ++j) {
tmp_len_square[3 * j] = (point_A[j].length)*(point_A[j].length);
}
for (int j = 0; j < N; ++j) {
tmp_len_square[(3 * j) + 1] = (point_B[j].width)*(point_B[j].width);
}
for (int j = 0; j < N; ++j) {
tmp_len_square[(3 * j) + 2] = (point_C[j].height)*(point_C[j].height);
}
for (int j = 0; j < N; ++j) {
float total = sqrt(tmp_len_square[3 * j] +
tmp_len_square[(3 * j) + 1] +
tmp_len_square[(3 * j) + 2]);
// ...
}
GetDesktopWindow
GetDC
GetClientRect
这为我提供CreateCompatibleBitmap
,我可以选择将其带到HBITMAP
:
HDC
我的目标是从第4步(CreateCompatibleDC
)或第5步(CreateCompatibleBitmap
)结束uint8字节数组吗?
由于
答案 0 :(得分:2)
您需要使用CreateCompatibleDC()
创建新DC,使用CreateDIBSection()
为此DC创建DIB(设备无关位图),使用SelectObject()
在新DC中选择DIB,然后使用BitBlt()
从原始DC复制到新DC。 CreateDIBSection
检索的指针将指向原始数据。这些数据由系统分配,这意味着您不需要自己分配,但是当您为DIB调用DeleteObject()
时,它将被释放。
这是C:
中的一个例子HDC hdcMemoryDC = CreateCompatibleDC(yourDC);
BITMAPINFO bmi;
memset(&bmi, 0, sizeof(BITMAPINFO));
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = width;
bmi.bmiHeader.biHeight = -height; // top-down
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 32;
bmi.bmiHeader.biCompression = BI_RGB;
HBITMAP hbmp;
COLORREF *pixelBuffer;
hbmp = CreateDIBSection( hdcMemoryDC, &bmi, DIB_RGB_COLORS, (VOID**)&pixelBuffer, NULL, 0 );
SelectObject( hdcMemoryDC, hbmp );
BitBlt( hdcMemoryDC, 0, 0, width, height, yourDC, 0, 0, SRCCOPY );