#pragma pack 在BITMAP结构体定义中的使用
|
块名称
|
对应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结构体定义中的使用的更多相关文章
- C#中结构体定义并转换字节数组
最近的项目在做socket通信报文解析的时候,用到了结构体与字节数组的转换:由于客户端采用C++开发,服务端采用C#开发,所以双方必须保证各自定义结构体成员类型和长度一致才能保证报文解析的正确性,这一 ...
- ARM单片机的头文件如何用结构体定义地址
下面我们以ARM Cortex-M0内核单片机LPC1114的头文件lpc11xx.h文件进行说明. 1.先说两句 lpc11xx.h文件是lpc11xx系列单片机包含的头文件.这个文件的作用和51单 ...
- Swift类和结构体定义-备
Swift中的类和结构体定义的语法是非常相似的.类使用class关键词定义类,使用struct关键词定义结构体,它们的语法格式如下: class 类名 { 定义类的成员 } struct 结构体名 { ...
- C语言结构体定义的几种方法
什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量.指针或数组等,用以实现较复杂的数据 ...
- 将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. ...
- 《从零开始学Swift》学习笔记(Day 25)——类和结构体定义
原创文章,欢迎转载.转载请注明:关东升的博客 Swift中的类和结构体定义的语法是非常相似的.类使用class关键词定义类,使用struct关键词定义结构体,它们的语法格式如下: class 类名 { ...
- go 结构体定义和结构体指针
结构体一个结构体(`struct`)就是一个字段的集合. 将来要使用它向java .C# 中的class 有相同的地位 struct 可以用来值传递 同时可以通过引用传递参数(地址) java C# ...
- 2018-3-4-dotnet-设计规范-·-结构体定义
title author date CreateTime categories dotnet 设计规范 · 结构体定义 lindexi 2018-03-04 17:48:44 +0800 2018-2 ...
- C语言中结构体定义
struct test { int a; }; /* 定义一个结构体,名字是test,这样就可以使用struct test 来定义变量.比如 struct test a; */ typedef str ...
随机推荐
- CentOS 安装 Zabbix
一.安装 centos7 网易下载 http://mirrors.163.com/centos/7.2.1511/isos/x86_64/CentOS-7-x86_64-DVD-1511.torren ...
- mongodb 的主从配置
mongoDB主从配置如下: 主库: port=27017 dbpath=/usr/local/mongodb/data logpath=/usr/local/mongodb/log/mongodb. ...
- ZooKeeper服务-操作(API、集合更新、观察者、ACL)
操作 create:创建一个znode(必须要有父节点)delete:删除一个znode(该znode不能有任何子节点)exists:测试一个znode是否存在并且查询它的元数据getACL,setA ...
- 透透彻彻IoC
本文转载自:http://stamen.iteye.com/blog/1489223/ 引述:IoC(控制反转:Inverse of Control)是Spring容器的内核,AOP.声明式事务等功能 ...
- ActiveMQ 消息存储
本章重点 ActiveMQ 中,队列和主题里的消息是怎么存储的 ActiveMQ 提供的四种消息存储形式 ActiveMQ 是怎么为消费者缓存消息的 使用订阅恢复模式,怎么控制消息缓存 简介 JMS ...
- 使用PathfindingProject Pro 4.0.10实现2D自动寻路
昨天由于策划的要求,要在项目的最后加个自动寻路的功能,跑去研究了下自动寻路的插件.不多说,上操作 首先在寻路的游戏物体上加上seeker.AI Lerp这两个脚本,注意要给target赋值. 之后给目 ...
- if 条件判断 和 判断总结---shell脚本
本文主要介绍了Shell脚本IF条件判断和判断条件总结,本文先是给出了IF条件判断的语法,然后给出了常用的判断条件总结,需要的朋友可以参考下. 前言: 无论什么编程语言都离不开条件判断.SHELL也不 ...
- PowerDesigner 学习
1. 创建主键,不能为空,递增列,唯一约束(key 通过唯一索引) 数据库-->根据数据库的改动更新model 或者 根据修改后的model (比如新添加的字段)产生新sql代码 2.powe ...
- JVM 知识点总览 - 高级 Java 工程师面试必备
在江湖中要练就绝世武功必须内外兼备,精妙的招式和深厚的内功,武功的基础是内功.对于武功低(就像江南七怪)的人,招式更重要,因为他们不能靠内功直接去伤人,只能靠招式,利刃上优势来取胜了,但是练到高手之后 ...
- 求一些数字字符参数的和(Java)
一.思路 输入数字(字符型)参数: 将字符型强制转化为整数型: 求和: 输出: 二.流程图 三.源程序代码及结果