Hej
Jeg prøver at læse en bmp-fil.
#include <stdlib.h>
#include <stdio.h>
//Declare data types
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long int DWORD;
//header structure
struct BMPfileHeader
{
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
};
//Main program
int main()
{
//Test
BYTE mybyte = 0;
WORD myword = 0;
DWORD mydword = 0;
BMPfileHeader aBMPfileHeader;
printf("The size of a byte is: %d bytes\n", sizeof(mybyte));
printf("The size of a word is: %d bytes\n", sizeof(myword));
printf("The size of a word is: %d bytes\n", sizeof(mydword));
FILE* pBMPfile;
pBMPfile = fopen("myimage.bmp", "rb");
if (pBMPfile != NULL)
{
//Read
fread(&aBMPfileHeader, sizeof(aBMPfileHeader), 1, pBMPfile);
fclose(pBMPfile);
printf("\nPrinting bitmap information:\n\n");
printf("Type: %s \n", (char*)&aBMPfileHeader.bfType);
printf("Size: %d\n", aBMPfileHeader.bfSize);
printf("Reserved1: %d\n", aBMPfileHeader.bfReserved1);
printf("Reserved2: %d\n", aBMPfileHeader.bfReserved2);
printf("Offset: %d\n", aBMPfileHeader.bfOffBits);
}
else
{
printf("\nCould not open file!\n\n");
}
//Enter to quit
printf("\nPress any key to exit.\n\n");
getchar();
}
Problemet er at det virker som om den læser for meget. De første 2 bytes i en bmp fil svarer til BM. Læser den en ekstra byte med der. Dette rykker på byterækkefølgen i hele headeren, så alt kommer en byte for tidligt. Reserved2 får f.eks. en værdi større end nul hvilket den ikke må.
Man kan se det ved at når den udskriver bfType kommer der et ekstra bogstav med, dette kunne måske skyldes at den læser videre i headerstrukturen indtil den når en byte med værdien 0 = '\0'. Men dette forklarer ikke forskydelsen.
Nogen der ved hvad der sker?