void CImgProcessDlg::OnBnClickedButton2() //保存图像数据
{
// TODO: 在此添加控件通知处理程序代码
//计算整副图像的字节数
UINT size = (m_nWidth*m_nBitCount/8+3)/4*4*m_nHeight;
//开辟内存空间,存放图像数据
BYTE * pdate = new BYTE[size];
//拷贝图像数据
memcpy(pdate,m_pDibData,size);
//填充位图文件信息头
BITMAPFILEHEADER bitmapfileheader;
bitmapfileheader.bfType=0x4d42;
bitmapfileheader.bfReserved1=bitmapfileheader.bfReserved2 = 0;
bitmapfileheader.bfSize = size;
bitmapfileheader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof
(BITMAPINFOHEADER)+ GetColorTabLength(m_nBitCount)*sizeof(RGBQUAD);
CFileDialog dlg(false,_T(“BMP”),_T(“*.bmp”),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
_T(“*.bmp|*.bmp|*.*|*.*|”));
if (dlg.DoModal()!=IDOK)
{
return;
}
CFile file;
//获得保存的路径
CString ss=dlg.GetPathName();
//打印出保存的路径
MessageBox(ss);
if(file.Open(ss, CFile::modeCreate |CFile::modeWrite))//创建,写的方式打开文件
{ //将文件信息头,信息头,图像数据都存入文件当中
file.Write(&bitmapfileheader,sizeof(BITMAPFILEHEADER));
file.Write(m_pBitmapInfo,sizeof(BITMAPINFOHEADER));
if(m_nBitCount != 24)
{
file.Write(m_pColorTab,256*sizeof(RGBQUAD));
}
file.Write(pdate,size);
file.Close();
}
this-》SetDlgItemTextA(IDC_EDIT,“保存成功”);
//释放刚才分配的区域
delete [] pdate;
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !