Ho un certo codice che legge l'intestazione di un file bitmap e stampa le informazioni a schermo.
Il problema è che se leggo i campi della struttura uno ad uno funziona:
codice:
/*1 caso: Funziona*/
fread(&bmp->header.type, sizeof(short), 1, bmp_file);
fread(&bmp->header.size, sizeof(int), 1, bmp_file);
fread(&bmp->header.reserved1, sizeof(short), 1, bmp_file);
fread(&bmp->header.reserved2, sizeof(short), 1, bmp_file);
fread(&bmp->header.offset, sizeof(int), 1, bmp_file);
fread(&bmp->infoHeader.InfoHeader_size, sizeof(int), 1, bmp_file);
fread(&bmp->infoHeader.width, sizeof(int), 1, bmp_file);
fread(&bmp->infoHeader.height, sizeof(nt), 1, bmp_file);
fread(&bmp->infoHeader.bitPlanes, sizeof(short), 1, bmp_file);
fread(&bmp->infoHeader.bitCount, sizeof(short), 1, bmp_file);
fread(&bmp->infoHeader.compressionType, sizeof(int), 1, bmp_file);
fread(&bmp->infoHeader.ImageData_size, sizeof(int), 1, bmp_file);
fread(&bmp->infoHeader.hPixelPerMeter, sizeof(int), 1, bmp_file);
fread(&bmp->infoHeader.vPixelPerMeter, sizeof(int), 1, bmp_file);
fread(&bmp->infoHeader.numberOfColors, sizeof(int), 1, bmp_file);
fread(&bmp->infoHeader.numberOfImportantColors, sizeof(int), 1, bmp_file);
se invece leggo tutto con una fread, mi sballa i valori:
codice:
/*2 caso: Non funziona*/
fread(&bmp->header, sizeof(BMP_Header), 1, bmp_file);
fread(&bmp->infoHeader, sizeof(BMP_InfoHeader), 1, bmp_file);
Le strutture sono dichiarate come:
codice:
typedef struct{
short type;
int size;
short reserved1;
short reserved2;
int offset;
}BMP_Header;
typedef struct {
int InfoHeader_size;
int width;
int height;
short bitPlanes;
short bitCount;
int ImageData_size;
int compressionType;
int hPixelPerMeter;
int vPixelPerMeter;
int numberOfColors;
int numberOfImportantColors;
}BMP_InfoHeader;
typedef struct {
BMP_Header header;
BMP_InfoHeader infoHeader;
}BMP;
L'output nel primo caso (funzionante) è:
codice:
TotalSize: 60
Size: 16
FileSize: 332374
Type: 19778
Reserved Bytes: 0 0
Offset: 54
------------BMP_InfoHeader----------
Size: 40
Info Header Size: 40
Width: 330
Height: 335
BitPlanes: 1
BitCount: 24
Compression Type: 0
Size of Image Data: 332320
Horizontal Pixel Per Meter: 12008
Vertical Pixel Per Meter: 12008
Number Of Used Colors: 0
Number Of Important Used Colors: 0
che è corretto.
Nel secondo caso (non funzionante); è:
codice:
TotalSize: 56
Size: 16
FileSize: 5
Type: 19778
Reserved Bytes: 0 54
Offset: 0
------------BMP_InfoHeader----------
Size: 40
Info Header Size: 21626880
Width: 21954560
Height: 65536
BitPlanes: 24
BitCount: 0
Compression Type: 786956293
Size of Image Data: 304087040
Horizontal Pixel Per Meter: 786956288
Vertical Pixel Per Meter: 0
Number Of Used Colors: 0
Number Of Important Used Colors: 826146816
Perchè ?