读取位图文件的步骤

 

LBITMAPINFO m_pbmInfo;

LPBITMAPINFOHEADER m_pbmInfoHeader;

void LoadBitmapFile(const char* fileName)

{

//打开位图文件

     CFile file(fileName,CFile::modeRead);

//将位图文件头读入内存    

 BITMAPFILEHEADER bmFileHeader;

file.Read((void*)&bmFileHeader,sizeof(bmFileHeader));

//检查是否为位图

if(bmpFileHeader.bfType!=0x4d42)

{

afxMessageBox("not a bitmap file!");

}

else

{

DWORD fileLength=file.GetLength();

DWORD dibSize=fileLength-sizeof(bmFileHeader);// 位图文件的大小减去头文件的大小

//分配全局内存

BYTE* pDib=(BYTE*)GlobalAllocPtr(GMEM_MOVEABLE,dibSize);

pDib=new BYTE[dibSize];

file.Read(pDib,dibSize);

file.Close();

//初始化指向结构BITMAPINFO和BITMAPINFOHEADER的指针

m_pbmInfo=(LPBITMAPINFO)pDib;

m_pbmInfoHeader=(LPBITMAPINFOHEADER)pDib;

//获得位图的大小

m_pbmInfoHeader->biSizeImage=GetDibSizeImage();//该函数在下面讲解,就是获取像素总和

m_pDibBits=pDib+m_pBmInfoHeader->biSize;//让m_pDibBits指向位图真正的第一位,非位图头。

}

}

 

DWORD GetDibSizeImage()

{

if(m_pbmInfoHeader->biSizeImage==0)

{

//单行字节数,即宽度

DWORD byteWidth=(DWORD)GetDibWidth();

DWORD height=(DWORD)GetDibHeight();

DWORD imageSize=byteWidht*height;

return imageSize;

}

else

return m_pbmInfoHeader->biSizeImage;

}

转载于:https://www.cnblogs.com/yangxiaoluck/archive/2011/06/21/2085835.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值