void OpenBitmapFile(PBITMAPINFO pbmi, PBITMAP pbmp, const char *path)
{
if(NULL == path){return;}
FILE *fp=fopen(path,"r");
if(NULL == fp){return;}
BITMAPFILEHEADER fileheader;
BITMAPINFO info;
fread(&fileheader,sizeof(fileheader),1,fp);
if(fileheader.bfType!=0x4D42)
{
//不是BMP位图文件
fclose(fp); return;
}
//读位图头部
fread(&info.bmiHeader, sizeof(BITMAPINFOHEADER), 1, fp);
//位图宽度
long width=info.bmiHeader.biWidth;
//位图高度
long height=info.bmiHeader.biHeight;
//WIDTHBYTE
int widthByte = WIDTHBYTE(width, info.bmiHeader.biBitCount);
DWORD size;
if (info.bmiHeader.biClrUsed != 0)
{
//带颜色表
size = info.bmiHeader.biSizeImage;
}
else
{
//不带颜色表的
size = height*widthByte;
}
if(NULL != m_pFileData)
{
delete [] m_pFileData;
m_pFileData = NULL;
}
m_pFileData = new UCHAR[size];//分配缓冲区
if(m_pFileData == NULL) { return; }
//忽略头部字节
fseek(fp,fileheader.bfOffBits,0);
fread(m_pFileData, size, 1, fp);
fclose(fp);
}
用C语言打开位图文件
于 2009-10-15 11:35:00 首次发布