Nowe posty

Autor Wątek: Struktura w programie jest inna niż w kodzie  (Przeczytany 3159 razy)

  • Gość
Struktura w programie jest inna niż w kodzie
« dnia: 2010-11-06, 21:38:04 »
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 *

Cytuj
#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);
Cytuj
#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;
}

chmooreck

  • Gość
Struktura w programie jest inna niż w kodzie
« Odpowiedź #1 dnia: 2010-11-06, 22:16:37 »
Zapewne chodzi o wyrównywanie pól w strukturze (dla szybszego dostępu). Poszukaj coś na ten temat. Można zmienić przez dyrektywy prekompilatora.