BITMAP位图文件主要分为如下3个部分:
块名称
对应Windows结构体定义
大小(Byte)
文件信息头 BITMAPFILEHEADER 14
位图信息头 BITMAPINFOHEADER 40
RGB颜色阵列 BYTE* 由图像长宽尺寸决定


定义BITMAP  文件信息头,位图信息头的  代码 如下:

#pragma pack(push) /* 将当前pack设置压栈保存;把原来对齐方式设置压栈
*/

#pragma pack(1)    /*
设新的对齐方式设置为一个字节对齐,必须在结构体定义之前使用,这是为了让结构体中各成员按1字节对齐 */





typedef struct tagBITMAPFILEHEADER { /* bmfh */   //文件信息头

unsigned short bfType; 

unsigned long  bfSize;

unsigned short bfReserved1;

unsigned short bfReserved2;

unsigned long  bfOffBits;

} BITMAPFILEHEADER;





typedef struct tagBITMAPINFOHEADER { /* bmih */     //位图信息头

unsigned long  biSize;

unsigned long  biWidth;

unsigned long  biHeight;

unsigned short biPlanes;

unsigned short biBitCount;

unsigned long  biCompression;

unsigned long  biSizeImage;

unsigned long  biXPelsPerMeter;

unsigned long  biYPelsPerMeter;

unsigned long  biClrUsed;

unsigned long  biClrImportant;

} BITMAPINFOHEADER;





#pragma pack(pop) /* 恢复先前的pack设置;作用:恢复对齐状态
*/

---------------------------------------------------------------------------------

注意:一定要让结构体中各成员按1字节对齐,否则就不能保证文件信息头的大小为14字节,位图信息头为40字节了!

加入push和pop可以使对齐恢复到原来状态

#pragma pack 在BITMAP结构体定义中的使用的更多相关文章

  1. C#中结构体定义并转换字节数组

    最近的项目在做socket通信报文解析的时候,用到了结构体与字节数组的转换:由于客户端采用C++开发,服务端采用C#开发,所以双方必须保证各自定义结构体成员类型和长度一致才能保证报文解析的正确性,这一 ...

  2. ARM单片机的头文件如何用结构体定义地址

    下面我们以ARM Cortex-M0内核单片机LPC1114的头文件lpc11xx.h文件进行说明. 1.先说两句 lpc11xx.h文件是lpc11xx系列单片机包含的头文件.这个文件的作用和51单 ...

  3. Swift类和结构体定义-备

    Swift中的类和结构体定义的语法是非常相似的.类使用class关键词定义类,使用struct关键词定义结构体,它们的语法格式如下: class 类名 { 定义类的成员 } struct 结构体名 { ...

  4. C语言结构体定义的几种方法

    什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量.指针或数组等,用以实现较复杂的数据 ...

  5. 将c语言的结构体定义变成对应的golang语言的结构体定义,并将golang语言结构体变量的指针传递给c语言,cast C struct to Go struct

    https://groups.google.com/forum/#!topic/golang-nuts/JkvR4dQy9t4 https://golang.org/misc/cgo/gmp/gmp. ...

  6. 《从零开始学Swift》学习笔记(Day 25)——类和结构体定义

    原创文章,欢迎转载.转载请注明:关东升的博客 Swift中的类和结构体定义的语法是非常相似的.类使用class关键词定义类,使用struct关键词定义结构体,它们的语法格式如下: class 类名 { ...

  7. go 结构体定义和结构体指针

    结构体一个结构体(`struct`)就是一个字段的集合. 将来要使用它向java .C# 中的class 有相同的地位 struct 可以用来值传递 同时可以通过引用传递参数(地址) java C# ...

  8. 2018-3-4-dotnet-设计规范-·-结构体定义

    title author date CreateTime categories dotnet 设计规范 · 结构体定义 lindexi 2018-03-04 17:48:44 +0800 2018-2 ...

  9. C语言中结构体定义

    struct test { int a; }; /* 定义一个结构体,名字是test,这样就可以使用struct test 来定义变量.比如 struct test a; */ typedef str ...

随机推荐

  1. Android中设置自己软件的铃声+震动

    有时候一些通讯软件需要这些个功能,比如说收到短信,通知等,要求手机发出铃声,或震动,或发光以提示用户知晓. 往往手机都是有默认设置的,比如说用户开启了铃声+震动:只铃声不震动:完全静音等等... 这个 ...

  2. 【bzoj1260】涂色paint[CQOI2007](区间dp)

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1260 这道题其实和codeforces607B有点像,然而做过原题的我居然没看出来.. ...

  3. Java基础(7)-集合类3

    list集合的特点 1)有序(存储和取出的元素一直) 2)可重复 List子类的特点 ArrayList 有序,可重复 底层数据结构是数组 查询快,增删慢 线程不安全,效率高 Vector 有序,可重 ...

  4. 使用标签代替goto关键字

    众所周知,java中没有goto语句,但是保留了goto这个关键字.由于goto是在源码级上的跳转,多次使用goto会引起代码混乱容易出错,这也是java取消goto语句的目的所在,但是goto语句也 ...

  5. jq中同个页面点击事件和回车事件

    button元素,绑定一系列事件的时候,点击-回车-回车,会出现错误. 解决办法,就是把button变成a 详情是,一个页面中有点击按钮,按钮点击之后,出现弹框1,点击弹框1的确定,出现弹框2,点击弹 ...

  6. Python OS导入一个文件夹所有文件

    import os path = 'F:/save_file/seminarseries/' for root, dirs, files in os.walk(path): print(root) 这 ...

  7. GreenDao 多表事务操作

    场景:Android APP多表操作事务管理 使用Android自带的sql操作类操作的时候需要手动处理事务,使用GreenDao的时候不用管了,啥都处理好了.但是,如果是多表操作的话,怎么统一管理事 ...

  8. host capability

    目前通过ComputeCapabilitiesFilter 是可以做到cpu 指令集的filter,ComputeCapabilitiesFilter 是通过flavor的extra_spe来传递的. ...

  9. python基础1 - 多文件项目和代码规范

    1. 多文件项目演练 开发 项目 就是开发一个 专门解决一个复杂业务功能的软件 通常每 一个项目 就具有一个 独立专属的目录,用于保存 所有和项目相关的文件 –  一个项目通常会包含 很多源文件 在 ...

  10. spring: 在Spring应用中使用JDBC(使用profiles选择数据源/使用基于JDBC驱动的数据源)

    在实际开发过程中有很多持久化技术可供选择:Hibernate.iBATIS和JPA等.尽管如此,还是有很多应用使用古老的方法即JDBC技术,来访问数据库. 使用JDBC技术不需要开发人员学习新的框架, ...