在c中读/写bmp文件

我正在尝试使用bmp文件。 首先,我尝试从bmp文件中读取标头和数据,并将其写入新文件:

#pragma pack(push,1) /* Windows 3.x bitmap file header */ typedef struct { char filetype[2]; /* magic - always 'B' 'M' */ unsigned int filesize; short reserved1; short reserved2; unsigned int dataoffset; /* offset in bytes to actual bitmap data */ } file_header; /* Windows 3.x bitmap full header, including file header */ typedef struct { file_header fileheader; unsigned int headersize; int width; int height; short planes; short bitsperpixel; /* we only support the value 24 here */ unsigned int compression; /* we do not support compression */ unsigned int bitmapsize; int horizontalres; int verticalres; unsigned int numcolors; unsigned int importantcolors; } bitmap_header; #pragma pack(pop) int foo(char* input, char *output) { //variable dec: FILE *fp,*out; bitmap_header* hp; int n; char *data; //Open input file: fp = fopen(input, "r"); if(fp==NULL){ //cleanup } //Read the input file headers: hp=(bitmap_header*)malloc(sizeof(bitmap_header)); if(hp==NULL) return 3; n=fread(hp, sizeof(bitmap_header), 1, fp); if(nbitmapsize); if(data==NULL){ //cleanup } fseek(fp,sizeof(char)*hp->fileheader.dataoffset,SEEK_SET); n=fread(data,sizeof(char),hp->bitmapsize, fp); if(n<1){ //cleanup } //Open output file: out = fopen(output, "w"); if(out==NULL){ //cleanup } n=fwrite(hp,sizeof(char),sizeof(bitmap_header),out); if(nfileheader.dataoffset,SEEK_SET); n=fwrite(data,sizeof(char),hp->bitmapsize,out); if(n<1){ //cleanup } fclose(fp); fclose(out); free(hp); free(data); return 0; } 

这是输入文件: 在此处输入图像描述

这是输出: 在此处输入图像描述

它们大小相同,似乎具有相同的标题。 有什么不对? 谢谢。

我猜你应该以二进制模式打开你的文件。