I've been looking into the file structure of BMP images and everything I'm reading says that the 4 bytes following the signature are designated as the filesize of the bmp file... It's always zero for me regardless of the BMP file. The signature is always correct though. What gives?
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <stdint.h>
#define BUF_SIZ 1024
typedef struct
{
uint16_t sig;
uint32_t filesize;
uint16_t reserved1;
uint16_t reserved2;
uint32_t offset;
}BitMapFileHeader;
int main(int argc, char ** argv)
{
FILE * rdfile;
char rdbuffer[BUF_SIZ];
size_t rdbytes;
size_t filesize;
BitMapFileHeader * header;
if(!(rdfile = fopen("test.bmp", "r")))
{
fprintf(stderr, "Error opening file\n");
exit(EXIT_FAILURE);
}
fseek(rdfile, 0, SEEK_END);
filesize = ftell(rdfile);
rewind(rdfile);
//printf("Filesize: %u bytes\n", filesize);
if((rdbytes = fread(rdbuffer, 1, BUF_SIZ, rdfile)))
{
header = (BitMapFileHeader *) rdbuffer;
fprintf(stdout,
"Signature: %c%c\n"
"FileSize: %u\n"
"Reserved1: %u\n"
"Reserved2: %u\n"
"Offset: %u\n\n\n",
header->sig, (header->sig >> 8),
header->filesize,
header->reserved1,
header->reserved2,
header->offset);
}
else
{
fprintf(stderr, "fread:", strerror(errno));
fclose(rdfile);
exit(EXIT_FAILURE);
}
#if 0
while(rdbytes = fread(rdbuffer, 1, BUF_SIZ, rdfile))
{
fwrite(rdbuffer, 1, rdbytes, stdout);
}
if(rdbytes == 0)
{
fprintf(stderr, "fread:", strerror(errno));
fclose(rdfile);
exit(EXIT_FAILURE);
}
#endif
fclose(rdfile);
return 0;
}