CFileDialog dlg读取图像文件
LPCTSTR lpszFilter = "BMP Files(*.bmp)|*.bmp|任何文件|*.*||";
CFileDialog dlg(TRUE,lpszFilter,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,lpszFilter,NULL);
CString filename;
CFile file; //打开文件对话框
if ( dlg.DoModal() == IDOPEN )
{
filename = dlg.GetPathName();
if ( file.Open(filename,CFile::modeRead|CFile::shareDenyNone,NULL) == 0 )
{
//读取文件失败
AfxMessageBox("无法打开文件!",MB_OK,0);
return FALSE;
}
//读取文件头
file.Read(&m_bf,sizeof(m_bf));
//判断是否为BMP文件
if ( m_bf.bfType != 0x4d42 )//'BM'
{
AfxMessageBox("非BMP文件!",MB_OK,0);
return FALSE;
}
//判断文件是否损坏
if ( file.GetLength() != m_bf.bfSize )
{
AfxMessageBox("文件已损坏,请检查!",MB_OK,0);
return FALSE;
}
//读文件信息头
file.Read(&m_bi,sizeof(m_bi));
//计算调色板数目
m_numQuad = 0;
if ( m_bi.biBitCount < 24 )
{
m_numQuad = 1<<m_bi.biBitCount;
}
//为图像信息m_pbi申请空间
m_pbi = (BITMAPINFO*)HeapAlloc(GetProcessHeap(),0,sizeof(BITMAPINFOHEADER)+m_numQuad*sizeof(RGBQUAD));
memcpy(m_pbi,&m_bi,sizeof(m_bi));
m_pRGB = (RGBQUAD*)((BYTE*)m_pbi+sizeof(BITMAPINFOHEADER));
//读取调色板
if ( m_numQuad != 0 )
{
file.Read(m_pRGB,sizeof(RGBQUAD)*m_numQuad);
}
//为图像数据申请空间
m_bi.biSizeImage = m_bf.bfSize - m_bf.bfOffBits;
m_pData = (BYTE*)HeapAlloc(GetProcessHeap(),0,m_bi.biSizeImage);
//读取图像数据
file.Read(m_pData,m_bi.biSizeImage);
//图像读取完毕,关闭文件,设置标志
file.Close();
flag = 1;
if( flag == 1 )
{
HeapFree(GetProcessHeap(),0,m_pbi);
HeapFree(GetProcessHeap(),0,m_pData);
}
}
请教各位高手,这样读取有错吗?怎么我在调试的时候显示CFileDialog dlg(TRUE,lpszFilter,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,lpszFilter,NULL);这句错误