C++ 在bmp文件中保存屏幕快照的设备上下文
如果我有这个设备上下文,如何将其保存为.bmp或其他格式而不丢失原始RGB值?如果我有这个设备上下文,如何将其保存为.bmp或其他格式而不丢失原始RGB值? 谢谢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
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);