MFC截图并存储为BMP文件
2021-09-07
24
0
CRect rect;
pdlg->GetClientRect(&rect);
CDC* pdc = pdlg->GetDC();
CBitmap memBitmap;
memBitmap.CreateCompatibleBitmap(pdc,rect.Width(),rect.Height());
CDC memDC;
memDC.CreateCompatibleDC(pdc);
memDC.SelectObject(&memBitmap);
memDC.BitBlt(0,0,rect.Width(),rect.Height(),pdc,0,0,SRCCOPY);
CString str;
CTime t = CTime::GetCurrentTime ();
str.Format("%d-%d-%d %d_%d_%d",t.GetYear(),t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMinute(),t.GetSecond());
CFileDialog dlg(FALSE,"bmp",str,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"24位位图(*.bmp)||");
if(dlg.DoModal()==IDOK)
{
FILE* fp = fopen(dlg.GetPathName(),"wb");
if(fp==NULL)
{
MessageBox("创建失败");
return;
}
BITMAPFILEHEADER header;
BITMAPINFOHEADER info;
header.bfType = (WORD)0x4d42;
header.bfReserved1 = 0;
header.bfReserved2 = 0;
header.bfSize = rect.Width()*rect.Height()*3+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
header.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
fwrite(&header,1,sizeof(BITMAPFILEHEADER),fp);
info.biBitCount = 24;
info.biClrImportant = 0;
info.biClrUsed = 0;
info.biCompression = BI_RGB;
info.biHeight = rect.Height();
info.biPlanes = 1;
info.biSize = sizeof(BITMAPINFOHEADER);
info.biSizeImage = 0;
info.biWidth = rect.Width();
info.biXPelsPerMeter = 0;
info.biYPelsPerMeter = 0;
fwrite(&info,1,sizeof(BITMAPINFOHEADER),fp);
ULONG num = rect.Width()*rect.Height()*3;
char* buff;
try
{
buff = new char[num];
}
catch(...)
{
buff = NULL;
MessageBox("图形空间申请失败!");
}
GetDIBits(memDC.m_hDC,(HBITMAP)memBitmap.m_hObject,0,rect.Height(),buff,(LPBITMAPINFO)&info,DIB_RGB_COLORS);
fwrite(buff,1,num,fp);
fclose(fp);
buff?delete [] buff:0;
}
memDC.DeleteDC();