Mam problem z struktura pliku BMP (z wikipedii). Przepisałem sobie do pliczku strukturę i teraz zastanawiam się co zrobiłem źle.
Mianowicie, offset bfSize powinien być 2, a jest 4. Nie wiem dlaczego. W kodzie mam zapisane short int -- char[2].
LoadBMP jest zwykłym przekonwertowaniem wskaźnika z char * na BITMAP * (wczytałem freadem i przekonwertowałem na BITMAP *
#include
#include
#include
#include "../image.h"
typedef struct tagBITMAP {
short int bfType;
int bfSize;
unsigned short bfReserved1;
unsigned short bfReserved2;
int bfOffBits;
int biSize;
int biWidth;
int biHeight;
unsigned short biPlanes;
unsigned short biBitCount;
int biCompression;
int biSizeImage;
int biXPelsPerMeter;
int biYPelsPerMeter;
int biClrUsed;
char biClrImportant;
char biClrRotation;
unsigned short biReserved;
} BITMAP;
int CheckBMP (void *file);
BITMAP *LoadBMP (void *data);
int FreeBMP (BITMAP *imageBMP);
#include
#include
#include "image.h"
#include "include\\bitmap.h"
int main (int argc, char **argv){
char *image;
BITMAP *imageBMP;
if (argc != 2 ){
printf ("Poda�e� niew�a�ciw� ilo�� parametr�w\\n");
return 1;
}
printf ("%s\\n", argv[1]);
image = LoadFile (argv[1]);
if (image == NULL) {
printf ("B��d przy �adowaniu obrazu do pami�ci.\\n");
return 2;
}
if (CheckBMP (image) != 0) {
printf ("File is not bmp file\\n");
return 3;
}
imageBMP = LoadBMP (image);
// printf ("
printf ("%d %x %x\\n", *((int *)&image[2]), imageBMP, image);
printf ("%d\\n", *((int *)&image[2]));
printf ("%x\\n", imageBMP->bfSize);
printf ("%x\\n", &imageBMP->bfType);
printf ("%x\\n", &imageBMP->bfSize);
printf ("%x\\n", &imageBMP->bfReserved1);
printf ("%x\\n", &imageBMP->bfReserved2);
//printf ("BMP file is %d\\n", imageBMP->bfSize);
FreeBMP (imageBMP);
//printf ("%d %d\\n", sizeof(int), sizeof(short int));
return 0;
}