C语言BMP读取中WORD类型的bmpType的问题
时间:2011-12-12
来源:互联网
我在读取bmp文件的过程中发现,在定义的结构体中不能定义bmpType,必须在主程序中单独定义WORD类型的变量fileType才能正确读取bmp文件,为什么?
网上有一个模糊的解释是说由于结构体内存结构决定,能不能解释详细些?感谢!
代码说明如下:
头文件中tagBITMAPFILEHEADER的定义
C/C++ code
主程序中代码片段:
C/C++ code
求详细解答
网上有一个模糊的解释是说由于结构体内存结构决定,能不能解释详细些?感谢!
代码说明如下:
头文件中tagBITMAPFILEHEADER的定义
C/C++ code
typedef struct tagBITMAPFILEHEADER { //WORD bfType; //位图文件的类型,必须为“BM”,0~1字节 DWORD bfSize; //位图文件的大小,以字节为单位,2~5字节 WORD bfReserved1; //位图文件保留字,必须为0,6~7字节 WORD bfReserved2; //位图文件保留字,必须为0,8~9字节 DWORD bfOffBits; //位图数据的起始位置,以相对于位图文件头的偏移量来表示(10~13)字节 }BITMAPFILEHEADER;
主程序中代码片段:
C/C++ code
WORD FileType; FILE *fpBMP; char *FilePath="C:\\BmpTest.bmp"; int main() { fpBMP=fopen(FilePath,"rb"); fread(&FileType,1,sizeof(WORD),fpBMP);
求详细解答
作者: DiffusionTensorImage 发布时间: 2011-12-12
#pragma pack(1)
作者: zhao4zhong1 发布时间: 2011-12-12
因为结构体字节对齐的问题,可以用如下方式定义结构体。
#pragma pack(push, 1)
struct
{
// 定义
};
#pragma pack(pop)
不过对BMP的问题,建议按标准分字节读取,也就是先读两个字节得到bfType再读4个字节得到bfSize这种方式,整个结构体直接读出或者直接写入的方法问题多多,可移植性和兼容性都很差。
#pragma pack(push, 1)
struct
{
// 定义
};
#pragma pack(pop)
不过对BMP的问题,建议按标准分字节读取,也就是先读两个字节得到bfType再读4个字节得到bfSize这种方式,整个结构体直接读出或者直接写入的方法问题多多,可移植性和兼容性都很差。
作者: xrunning 发布时间: 2011-12-12
直接读到内存也没有关系,只要知道这之间还有什么细节还顾及就可以了。
主要就是对齐以及字节序的问题。
主要就是对齐以及字节序的问题。
作者: sinservice 发布时间: 2011-12-12
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28