登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

面包会有的

... ...

 
 
 

日志

 
 

BOOL CDib::Read(CFile* pFile)  

2011-01-21 11:34:37|  分类: VC++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

BOOL CDib::Read(CFile* pFile)
{
 // 1. read file header to get size of info hdr + color table
 // 2. read info hdr (to get image size) and color table
 // 3. read image
 // can't use bfSize in file header
 
 // 清除DIB
 Empty();
 
 int nCount, nSize;
 BITMAPFILEHEADER bmfh;//位图文件头结构,定义了一个对象
 
 // 尝试读取BMP文件
 try
 {
  // 读BMP文件头
  nCount = pFile->Read((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER));//位图文件头存放在位图文件的开头部分,具体为什么可以研究位图文件的相关内容。
  
  // 判断读取文件头的大小是否正确
  if(nCount != sizeof(BITMAPFILEHEADER))
  {
   // 读文件出错
   throw new CException;
  }
  
  // 判断是否是"BM"
  if(bmfh.bfType != 0x4d42)//位图文件头结构体的一个字段,只要是位图文件,这个值始终是“BM”
  {
   // 不是BMP文件,抛出异常
   throw new CException;
  }
  nSize = bmfh.bfOffBits - sizeof(BITMAPFILEHEADER);
  m_lpBMIH = (LPBITMAPINFOHEADER) new char[nSize];
  m_nBmihAlloc = m_nImageAlloc = crtAlloc;
  nCount = pFile->Read(m_lpBMIH, nSize); // info hdr & color table
  ComputeMetrics();//compute:计算;Metrics:尺寸
  ComputePaletteSize(m_lpBMIH->biBitCount);
  MakePalette();
  m_lpImage = (LPBYTE) new char[m_dwSizeImage];
  nCount = pFile->Read(m_lpImage, m_dwSizeImage); // image only
 }
 catch(CException* pe)
 {
  AfxMessageBox("Read error");
  pe->Delete();
  return FALSE;
 }
 return TRUE;
}
  评论这张
 
阅读(954)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018