Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在bmp文件中保存屏幕快照的设备上下文_C++_Windows - Fatal编程技术网

C++ 在bmp文件中保存屏幕快照的设备上下文

C++ 在bmp文件中保存屏幕快照的设备上下文,c++,windows,C++,Windows,如果我有这个设备上下文,如何将其保存为.bmp或其他格式而不丢失原始RGB值?如果我有这个设备上下文,如何将其保存为.bmp或其他格式而不丢失原始RGB值? 谢谢 LPRGBQUAD十六进制颜色; //HDC dc=GetDC(空); HWND HWND=GetDesktopWindow(); HDC HDC=GetDC(hWnd); RECT-RECT; GetWindowRect(hWnd和&rect); int MAX_WIDTH=rect.right-rect.left; int MAX

如果我有这个设备上下文,如何将其保存为.bmp或其他格式而不丢失原始RGB值?如果我有这个设备上下文,如何将其保存为.bmp或其他格式而不丢失原始RGB值? 谢谢

LPRGBQUAD十六进制颜色;
//HDC dc=GetDC(空);
HWND HWND=GetDesktopWindow();
HDC HDC=GetDC(hWnd);
RECT-RECT;
GetWindowRect(hWnd和&rect);
int MAX_WIDTH=rect.right-rect.left;
int MAX_HEIGHT=rect.bottom-rect.top;

//不能您需要位的大小。对于32位图像,大小计算如下:

DWORD dib_size = MAX_WIDTH * MAX_HEIGHT * 4;
您还应该将此值分配给
位图.bmiHeader.biSizeImage

bitmap.bmiHeader.biSizeImage = dib_size;
接下来,您需要
bmpFileHeader

BITMAPFILEHEADER bmpFileHeader = { 0 };
bmpFileHeader.bfType = 'MB';
bmpFileHeader.bfSize = 54 + dib_size;
bmpFileHeader.bfOffBits = 54;
bfType
“BM”
(小端词向后)

bfSize
54
它是
sizeof(BITMAPFILEHEADER)+sizeof(BitMapInfo Header)

BITMAPFILEHEADER bmpFileHeader = { 0 };
bmpFileHeader.bfType = 'MB';
bmpFileHeader.bfSize = 54 + dib_size;
bmpFileHeader.bfOffBits = 54;
const wchar_t* filename = L"__unicode.bmp";
HANDLE hfile = CreateFileW(filename,
    GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(hfile != INVALID_HANDLE_VALUE)
{
    DWORD temp;
    WriteFile(hfile, &bmpFileHeader, sizeof(BITMAPFILEHEADER), &temp, NULL);
    WriteFile(hfile, (BITMAPINFOHEADER*)&bitmap, sizeof(BITMAPINFOHEADER), &temp, NULL);
    WriteFile(hfile, bitPointer, dib_size, &temp, NULL);
    CloseHandle(hfile);
}

//release GDI resource handles
SelectObject(hdcTemp, hbmpOld);
DeleteObject(hBitmap2);
DeleteDC(hdcTemp);