如何读入位图(二)

简介: 如何读入位图(二) (2009-03-25 21:25:16) 转载 标签: 杂谈 分类: 数字图像处理 在C语言中没有预定义WORD和DWORD的数据类型,因此我们可以和它们同样字节的数据类型来代替,如下: typedef unsigned...

如何读入位图(二)

(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;

}

 

 
相关文章
|
存储 UED 开发者
Flutter鸿蒙版本灵活使用方法间的回调处理复杂化的逻辑
在 Flutter 开发中,灵活使用函数回调可以提高代码的可重用性、简化异步编程、增强解耦设计和提升用户体验。本文通过一个简单的示例,展示了如何在 Flutter 中实现函数调用和回调的基本使用。示例代码包括主入口、页面组件和回调函数的定义与调用,详细解析了每个部分的功能和作用。通过这种方式,开发者可以在操作完成后执行特定逻辑,使代码更易读和维护。
249 0
|
JavaScript Python
7-4|execjs._exceptions.ProgramError: Error: Cannot find module 'jsdom'
7-4|execjs._exceptions.ProgramError: Error: Cannot find module 'jsdom'
|
JavaScript 前端开发
vue导出pdf(大数量可能有问题)
vue导出pdf(大数量可能有问题)
523 2
|
JavaScript 应用服务中间件 API
Node.js搭建REST API实战:从基础到部署
【7月更文挑战第18天】通过以上步骤,你可以将你的Node.js REST API从开发环境顺利迁移到生产环境,并利用各种工具和技术来确保应用的稳定性、安全性和可扩展性。
|
8月前
课时20:案例分析三(Dog)
设计了一个 `Dog` 类,包含名字、颜色和年龄等属性,并通过构造方法初始化这些属性。定义了 `getInfo()` 方法输出狗的信息。在 `JavaDemo` 类中创建 `Dog` 对象并调用 `getInfo()` 方法展示信息。这是一个典型的简单框架示例。
103 0
|
传感器 智能硬件
石墨烯革命:超材料的无限潜力
【10月更文挑战第11天】石墨烯作为一种具有革命性的新材料,正在改变我们对科技和未来的认知。随着研究的深入和应用的拓展,石墨烯将在未来发挥更加重要的作用,推动科技的发展和社会的进步。石墨烯革命的号角已经吹响,让我们共同期待这场超材料带来的无限潜力。
|
网络安全 数据安全/隐私保护 Python
Python 渗透测试:文件传输爆破( 21端口 )
Python 渗透测试:文件传输爆破( 21端口 )
131 2
|
SQL 关系型数据库 MySQL
MySQL写Shell方法总结
MySQL注入点,用工具对目标站点写入一句话shell,需要哪些前提条件?
553 1