读书人

保存bmp文件头的疑问解决办法

发布时间: 2012-04-01 17:23:46 作者: rapoo

保存bmp文件头的疑问
【疑问】将文件头一起写入得到图片不能正常显示,将其成员一个个写入就不会错,这是为什么?
【详情】bmp文件头结构体:

C/C++ code
typedef struct tagBITMAPFILEHEADER{    WORD bfType;    DWORD bfSize;    WORD bfReserved1;    WORD bfReserved2;    DWORD bfOffBits;} BITMAPFILEHEADER;


这样做会有问题:

C/C++ code
//一起写入就有问题fwrite(bmp->fileHeader,sizeof(BITMAPFILEHEADER),1,output);


这样做不会有问题:

C/C++ code
/***一个个写入不会错*/void writeFileHeader(BITMAPFILEHEADER *fileHeader,FILE *output){    fwrite(&(fileHeader->bfType),sizeof(WORD),1,output);    fwrite(&(fileHeader->bfSize),sizeof(DWORD),1,output);    fwrite(&(fileHeader->bfReserved1),sizeof(WORD),1,output);    fwrite(&(fileHeader->bfReserved2),sizeof(WORD),1,output);    fwrite(&(fileHeader->bfOffBits),sizeof(DWORD),1,output);}


[解决办法]
用winhex对比下写入的buf 就可以得知
[解决办法]
[/code=C/C++]
#pragma pack(push)
#pragma pack(1)

typedef struct tagBITMAPFILEHEADER
{
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;

#pragma pack(pop)

[/code]

读书人网 >C语言

热点推荐