linux: lecture d'une image bmp
bonjour je travail sous linux, et depuis un moment, j'essaye de récuperer des informations sur une image bmp, mais apres le chargement de l'image, la largeur et la hauteur que j'ai ne sont pas les vrais largeur et hauteur de l'image.
Voici les structures que j'utilise
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
// entete du fichier bitmap
typedef struct {
// le type de fichier
unsigned char bfType[2];
// la taille en octect des données
unsigned int bfSize;
// 0
unsigned short bfReserved1;
// 0
unsigned short bfReserved2;
// le premier octet des données
unsigned int bfOffBits;
} bmp_file_header_t;
// entete d'informations sur le fichier bitmap
typedef struct {
// taille de la structure
unsigned int biSize;
// largeur en px
int biWidth;
// hauteur en px (peut être négatif attention)
int biHeight;
// 1
unsigned short biPlanes;
// nombre de bits par pixel
unsigned short biBitCount;
// type de compression
unsigned int biCompression;
// taille de l'image en octet
unsigned int biSizeImage;
// pixels par metre sur l'axe x
int biXPelsPerMeter;
// pixels par metre sur l'axe y
int biYPelsPerMeter;
// nmmbre de couleurs utilisées
unsigned int biClrUsed;
// nombre de couleurs importantes
unsigned int biClrImportant;
} bmp_info_header_t; |
Voici mon code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
FILE* fp;
bmp_file_header_t bmfh;
bmp_info_header_t bmih;
// pointeur vers le premier pixel de l'image
// compri entre 0 et 255
unsigned char* bitmapImage;
// ouverture du fichier en lecture binaire
fp = fopen( filename, "rb" );
// si l'ouverture a echoue
if( ! fp ) {
fprintf( stderr, "error: ne peux pas ouvrir \"%s\"!\n", filename );
return NULL;
}
fread( &bmfh, sizeof( bmp_file_header_t ), 1, fp );
if( strncmp( ( char* ) bmfh.bfType, "BM", 2 ) != 0 ) {
fprintf( stderr, "%s n'est pas un fichier bmp valide!\n", filename );
fclose( fp );
return NULL;
}
fread( &bmih, sizeof( bmp_info_header_t ), 1, fp );
std::cout << "biCompression[ " << bmih.biCompression << " ]\n";
std::cout << "biSizeImage[ " << bmih.biSizeImage << " ]\n";
std::cout << "biWidth[ " << bmih.biWidth << " ]\n";
std::cout << "biHeight[ " << bmih.biHeight << " ]\n";
fread( bitmapImage, 1, bmih.biSizeImage, fp ); |
L'image a une hauteur et une largeur de 196, et voici le resultat que j'ai
Code:
1 2 3 4 5 6
|
biCompression[ 0 ]
biSizeImage[ 185729024 ]
biWidth[ 12845056 ]
biHeight[ 65536 ] |
Merci de votre aide.