您的位置:首页 > 其它

VC8.0中的一些心得体会——打开位图

2006-03-10 16:39 295 查看
void CTRYDoc::OnFileOpen()
{
// TODO: 在此添加命令处理程序代码
CString str = _T("BMP");
CString str1 = _T("Image files (*.BMP)|*.BMP||");
CString str2 = _T("位图打开");
CString str3 = _T("取消读入位图");
CString str4 = _T("读入位图失败");
CString str5 = _T("不是位图格式文件");

LPCWSTR sext = (LPCWSTR)str;
LPCWSTR sfiltr = (LPCWSTR)str1;
LPCWSTR sz = (LPCWSTR)str2;
LPCWSTR sz1 = (LPCWSTR)str3;
LPCWSTR sz2 = (LPCWSTR)str4;
LPCWSTR sz3 = (LPCWSTR)str5;

CFileDialog Open(TRUE,sext,
NULL, OFN_HIDEREADONLY,
sfiltr);
Open.m_ofn.lpstrTitle=sz;
int ret=Open.DoModal();
CString bmpPath;
if(ret==IDOK)
bmpPath=Open.GetPathName( );
else
{
AfxMessageBox(sz1);
//return TRUE;
}
CFile file;
if(!file.Open(bmpPath,CFile::modeRead|CFile::shareDenyWrite))
{
AfxMessageBox(sz2);
//return FALSE;
}
BITMAPFILEHEADER *lpbmpfilehead=(BITMAPFILEHEADER*)(new char[14]);//1
DWORD size;
size=file.GetLength();
file.Read(LPSTR(lpbmpfilehead),14);
if(lpbmpfilehead->bfType!=0x4d42)
{
AfxMessageBox(sz3);
//return TRUE;
}
BITMAPINFOHEADER *lpbmpinfohead=(BITMAPINFOHEADER*)(new char[40]);//2
bmpfilesize=lpbmpfilehead->bfSize-lpbmpfilehead->bfOffBits;//象素所占空间
UpdateMemSize(bmpfilesize+40+256*4);
file.Read(LPSTR(lpbmpinfohead),40);
CopyMemory(lpDIB,lpbmpinfohead,40);
//lpbmpinfohead可以用来对位图的信息作初步的判断
delete []lpbmpfilehead;//1
delete []lpbmpinfohead;//2
file.Read(lpDIB+40,size-54);
file.Close();
drawbmp=TRUE;//唯一用来确定载入哪种格式位图,bmp or Jpeg or other?
LoadBmp=TRUE;//view类中位图内存区域只是在doc类打开open菜单时才从doc类读入数据
UpdateAllViews(NULL);
LoadBmp=FALSE;
// return TRUE;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: