void CmyPaintView::OnBmpSave()
{
CClientDC dc(this);
CRect rect;
BOOL showMsgTag; //是否要弹出”图像保存成功对话框"
GetClientRect(&rect); //获取画布大小
HBITMAP hbitmap = CreateCompatibleBitmap(dc, rect.right-rect.left, rect. bottom-rect.top);
//创建兼容位图
HDC hdc = CreateCompatibleDC(dc); //创建兼容DC,以便将图像保存为不同的格式
HBITMAP hOldMap = (HBITMAP)SelectObject(hdc,hbitmap);
//将位图选入DC,并保存返回值
BitBlt(hdc,0,0,rect.right-rect.left,rect.bottom-rect.top,dc,0,0,SRCCOPY);
//将屏幕DC的图像复制到内存DC中
CImage image;
image.Attach(hbitmap); //将位图转化为一般图像
if (!saveTag) //如果图像是第一次被写入,则打开对话框
{
saveTag = TRUE;
showMsgTag = TRUE;
CString strFilter = _T("位图文件(*.bmp)|*.bmp|JPEG 图像文件|*.jpg|
GIF图像文件|*.gif|PNG图像文件|*.png|
其他格式(*.*)|*.*||");
CFileDialog dlg(FALSE,_T("bmp"),_T("iPaint1.bmp"),NULL,strFilter);
if (dlg.DoModal() != IDOK)
return;
CString strFileName; //如果用户没有指定文件扩展名,则为其添加一个
CString strExtension;
strFileName = dlg.m_ofn.lpstrFile;
if (dlg.m_ofn.nFileExtension = 0) //扩展名项目为0
{
switch (dlg.m_ofn.nFilterIndex)
{
case 1:
strExtension = "bmp";break;
case 2:
strExtension = "jpg";break;
case 3:
strExtension = "gif";break;
case 4:
strExtension = "png";break;
default:
break;
}
strFileName = strFileName + "." + strExtension;
}
saveFilePath = strFileName; //saveFilePath为视类中的全局变量,类型为CString
}
else
{
showMsgTag = FALSE;
}
//AfxMessageBox(saveFilePath); //显示图像保存的全路径(包含文件名)
HRESULT hResult = image.Save(saveFilePath); //保存图像
if (FAILED(hResult))
{
MessageBox(_T("保存图像文件失败!"));
}
else
{
if(showMsgTag)
MessageBox(_T("文件保存成功!"));
}
image.Detach();
SelectObject(hdc,hOldMap);
}