如何读入位图(二)

本文介绍如何使用C语言读取位图文件的文件头信息。通过定义结构体和函数,可以有效地解析位图文件的基本属性,如类型、大小等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何读入位图(二)

(2009-03-25 21:25:16)
标签:

杂谈

分类: 数字图像处理

C语言中没有预定义WORDDWORD的数据类型,因此我们可以和它们同样字节的数据类型来代替,如下:

typedef unsigned short WORD;

typedef unsigned long DWORD;

typedef long LONG;

typedef unsigned char BYTE;

//文件头结构体

typedef struct tagBITMAPFILEHEADER

{ // bmfh

    WORD    bfType;

    DWORD   bfSize;

    WORD    bfReserved1;

    WORD    bfReserved2;

    DWORD   bfOffBits;

}BITMAPFILEHEADER;

//信息头结构体

typedef struct tagBITMAPINFOHEADER

{ // bmih

    DWORD biSize;

    LONG   biWidth;

    LONG   biHeight;

    WORD   biPlanes;

    WORD   biBitCount;

    DWORD biCompression;

    DWORD biSizeImage;

    LONG   biXPelsPerMeter;

    LONG   biYPelsPerMeter;

    DWORD biClrUsed;

    DWORD biClrImportant;

}BITMAPINFOHEADER;

//调色板项结构体

typedef struct tagRGBQUAD

{ // rgbq

    BYTE    rgbBlue;

    BYTE    rgbGreen;

    BYTE    rgbRed;

    BYTE    rgbReserved;

}RGBQUAD;

 

C语言读入文件头:

int ReadFileHeader(char *filepath,BITMAPFILEHEADER *bmfh)

{

       FILE *fp;

       //打开文件

       fp=fopen(filepath,"rb");

       if(!fp)

       {     //如果打开失败

              printf("Can not open the file:%s\n",filepath);

              return -1;

       }

       //读入bfType

       if(fread(&bmfh->bfType,sizeof(WORD),1,fp)!=1)

       {

              printf("Can not read bfType in the file header.\n");

              fclose(fp);

              return -1;

       }

       //读入bfSize

       if(fread(&bmfh->bfSize,sizeof(DWORD),1,fp)!=1)

       {

              printf("Can not read bfSize in the file header.\n");

              fclose(fp);

              return -1;

       }

       //读入bfReserved1

       if(fread(&bmfh->bfReserved1,sizeof(WORD),1,fp)!=1)

       {

              printf("Can not read bfReserved1 in the file header.\n");

              fclose(fp);

              return -1;

       }

       //读入bfReserved2

       if(fread(&bmfh->bfReserved2,sizeof(WORD),1,fp)!=1)

       {

              printf("Can not read bfReserved2 in the file header.\n");

              fclose(fp);

              return -1;

       }

       //读入bfOffBits

       if(fread(&bmfh->bfOffBits,sizeof(DWORD),1,fp)!=1)

       {

              printf("Can not read bfOffBits in the file header.\n");

              fclose(fp);

              return -1;

       }

       //关闭文件指针

       fclose(fp);

       return 0;

}

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值