19,468
社区成员
发帖
与我相关
我的任务
分享
//保存位图文件
BITMAPFILEHEADER bitmapFileHeader;
BITMAPINFOHEADER bitmapInfoHeader;
BITMAP strBitmap;
int wBitCount = 32;
bm->GetBitmap(&strBitmap);
DWORD dwBmBitsSize = ((strBitmap.bmWidth * wBitCount+31)/32) * 4 * strBitmap.bmHeight;
bitmapFileHeader.bfType = 0x4D42;
bitmapFileHeader.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + dwBmBitsSize;
bitmapFileHeader.bfReserved1 = bitmapFileHeader.bfReserved2 = 0;
bitmapFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bitmapInfoHeader.biSize = sizeof(BITMAPINFOHEADER);
bitmapInfoHeader.biWidth = strBitmap.bmWidth;
bitmapInfoHeader.biHeight = strBitmap.bmHeight;
bitmapInfoHeader.biPlanes = 1;
bitmapInfoHeader.biBitCount = wBitCount;
bitmapInfoHeader.biCompression = BI_RGB;
bitmapInfoHeader.biSizeImage = strBitmap.bmWidth * strBitmap.bmHeight *4;
bitmapInfoHeader.biXPelsPerMeter = 0;
bitmapInfoHeader.biYPelsPerMeter = 0;
bitmapInfoHeader.biClrUsed = 0;
bitmapInfoHeader.biClrImportant = 0;
char* context = new char[dwBmBitsSize];
GetDIBits(GetDlgItem(IDC_IMAGE)->GetDC()->m_hDC, (HBITMAP)bm->m_hObject, 0, bitmapInfoHeader.biHeight, (LPVOID)context, (BITMAPINFO*)&bitmapInfoHeader, DIB_RGB_COLORS);
CFile file;
file.Open("C:\\1.bmp", CFile::modeCreate|CFile::modeWrite);
file.Write(&bitmapFileHeader, sizeof(BITMAPFILEHEADER));
file.Write(&bitmapInfoHeader, sizeof(BITMAPINFOHEADER));
file.Write(context, dwBmBitsSize);
file.Close();
delete context;