读取位图文件的步骤

 

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;

}

posted @ 2011-06-21 11:17  luck_net  阅读(469)  评论(0编辑  收藏  举报