#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可以使对齐恢复到原来状态
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步