bmp文件打开的问题

i_mandy 2008-04-01 10:41:35
我从网上下了一个dib类,载入一个SDI中,我在menu中新建一个菜单项打开图象,在mainframe中构造一处理函数void CMainFrame::OnOpen()
{
CFileDialog FileOpenDlg(TRUE, ".bmp", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"BMP Files(*.bmp) |*.bmp |All Files(*.*) |*.* | |",NULL); if(FileOpenDlg.DoModal()==IDOK)
{CFile*fp;fp->GetFileName();




m_gp.ReadSection(fp,NULL);
if(m_gp.ReadSection(fp,NULL)) {CWnd*pWnd;CDC*pDC=pWnd->GetDC();//CDC*pDC=GetParentDC();
CPoint as;as.x=0;as.y=0;CSize sz;CRect rc;
GetClientRect(&rc);
sz.cx=rc.Width();
sz.cy=rc.Height();
m_gp.Draw(pDC,as,sz);}}
}m_gp为在mainframe中定义的cdib类的全局变量,调用的两个函数的定义为BOOL CDib::ReadSection(CFile* pFile, CDC* pDC /* = NULL */)
{
// new function reads BMP from disk and creates a DIB section
// allows modification of bitmaps from disk
// 1. read file header to get size of info hdr + color table
// 2. read info hdr (to get image size) and color table
// 3. create DIB section based on header parms
// 4. read image into memory that CreateDibSection allocates
Empty();
int nCount, nSize;
BITMAPFILEHEADER bmfh;
try {
nCount = pFile->Read((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER));
if(nCount != sizeof(BITMAPFILEHEADER)) {
throw new CException;
}
if(bmfh.bfType != 0x4d42) {
throw new CException;
}
nSize = bmfh.bfOffBits - sizeof(BITMAPFILEHEADER);
m_lpBMIH = (LPBITMAPINFOHEADER) new char[nSize];
m_nBmihAlloc = crtAlloc;
m_nImageAlloc = noAlloc;
nCount = pFile->Read(m_lpBMIH, nSize); // info hdr & color table
if(m_lpBMIH->biCompression != BI_RGB) {
throw new CException;
}
ComputeMetrics();
ComputePaletteSize(m_lpBMIH->biBitCount);
MakePalette();
UsePalette(pDC);
m_hBitmap = ::CreateDIBSection(pDC->GetSafeHdc(), (LPBITMAPINFO) m_lpBMIH,
DIB_RGB_COLORS, (LPVOID*) &m_lpImage, NULL, 0);
ASSERT(m_lpImage != NULL);
nCount = pFile->Read(m_lpImage, m_dwSizeImage); // image only
}
catch(CException* pe) {
AfxMessageBox("ReadSection error");
pe->Delete();
return FALSE;
}
return TRUE;
}BOOL CDib::Draw(CDC* pDC, CPoint origin, CSize size)
{
if(m_lpBMIH == NULL) return FALSE;
if(m_hPalette != NULL) {
::SelectPalette(pDC->GetSafeHdc(), m_hPalette, TRUE);
}
pDC->SetStretchBltMode(COLORONCOLOR);
::StretchDIBits(pDC->GetSafeHdc(), origin.x, origin.y, size.cx, size.cy,
0, 0, m_lpBMIH->biWidth, m_lpBMIH->biHeight,
m_lpImage, (LPBITMAPINFO) m_lpBMIH, DIB_RGB_COLORS, SRCCOPY);
return TRUE;
}编译运行后,出现打开文件对话框,但无法找到bmp文件,望指教
...全文
104 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
huxiongge 2011-03-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 i_mandy 的回复:]
我对调用函数时参数的传入不理解,调用ReadSection(CFile* pFile, CDC* pDC /* = NULL */)
pfile 应该如何传入
[/Quote]
例子很不错,谢谢
tccqs 2008-04-09
  • 打赏
  • 举报
回复
up and mark,,
tccqs 2008-04-09
  • 打赏
  • 举报
回复
up and mark,,
wangdong_monkey 2008-04-09
  • 打赏
  • 举报
回复
CFile*fp;fp->GetFileName();
这一句不对!
应该这么写:
CFile*fp;
fp.Open(FileOpenDlg.GetPathName(),CFile::modeRead,NULL);
后面的我没看!
菜牛 2008-04-01
  • 打赏
  • 举报
回复
不是函数参数如何传入,而是你这个fp根本没有构造、没有打开文件。
i_mandy 2008-04-01
  • 打赏
  • 举报
回复
我对调用函数时参数的传入不理解,调用ReadSection(CFile* pFile, CDC* pDC /* = NULL */)
pfile 应该如何传入
菜牛 2008-04-01
  • 打赏
  • 举报
回复
{CFile*fp;fp->GetFileName();
这算什么?

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧