【发布时间】:2013-04-24 13:08:49
【问题描述】:
我正在尝试读取 BMP 文件的标题,然后显示其内容。
struct BMP *bmp;
bmp = (struct BMP*)malloc(sizeof(struct BMP));
if(bmp)
{
fread(bmp,sizeof(struct BMP),1,bmpFile); //This does not work for me
//Then we display the contents
printf("#######CABECALHO DE UM ARQUIVO .BMP (BITMAP)#########\n");
printf("\n");
printf("Tipo de Arquivo (2 bytes): %c%c\n", bmp->id[0],bmp->id[1]);
printf("Tamanho do arquivo (4 bytes): %d Kb\n",bmp->filesize/1024);
printf("Reservado1 (2 bytes): %x\n",bmp->reserved[0]);
printf("Reservado2 (2 bytes): %x\n",bmp->reserved[1]);
printf("Tamanho do Cabecalho BMP: %d\n",bmp->headersize);
printf("Tamanho do Info Header (4 bytes): %d\n", bmp->infosize);
printf("Largura: (4 bytes): %d\n", bmp->width);
printf("Altura: (4 bytes): %d\n", bmp->height);
printf("Plane: (2 bytes): %x\n", bmp->plane);
printf("Bits por Pixel: (2 bytes): %x\n", bmp->bits);
printf("Compressao: (4 bytes): %d\n", bmp->compression);
printf("Tamanho da Imagem: (4 bytes): %d\n", bmp->imagesize/1024);
printf("X: (4 bytes): %d\n", bmp->x);
printf("Y: (4 bytes): %d\n", bmp->y);
printf("Nro de Cores : (4 bytes): %d\n", bmp->clrUsed);
printf("Nro de Cores Importantes : (4 bytes): %d\n", bmp->clrImportant);
printf("\n");
printf("#######FIM DO CABECALHO TOTAL DE 50 BYTES#########");
}
但是它显示给我的唯一准确信息是前 2 个字节,所有其他值都不正确。
如果不是读取整个结构
struct fread(bmp,sizeof(struct BMP),1,bmpFile);
我一次读取每个元素
fread(&bmp->id[0],sizeof(char),1,bmpFile);
fread(&bmp->id[1],sizeof(char),1,bmpFile);
fread(&bmp->filesize,sizeof(int),1,bmpFile);
fread(&bmp->reserved[0],sizeof(short),1,bmpFile);
fread(&bmp->reserved[1],sizeof(short),1,bmpFile);
fread(&bmp->headersize,sizeof(int),1,bmpFile);
fread(&bmp->infosize,sizeof(int),1,bmpFile);
fread(&bmp->width,sizeof(int),1,bmpFile);
fread(&bmp->height,sizeof(int),1,bmpFile);
fread(&bmp->plane,sizeof(short),1,bmpFile);
fread(&bmp->bits,sizeof(short),1,bmpFile);
fread(&bmp->compression,sizeof(int),1,bmpFile);
fread(&bmp->imagesize,sizeof(int),1,bmpFile);
fread(&bmp->x,sizeof(int),1,bmpFile);
fread(&bmp->y,sizeof(int),1,bmpFile);
fread(&bmp->clrUsed,sizeof(int),1,bmpFile);
fread(&bmp->clrImportant,sizeof(int),1,bmpFile);
然后所有值都正确显示... 所以我的问题是为什么当我一次阅读整个结构时会发生不同的情况。
【问题讨论】:
-
你是用二进制模式打开文件的吗?