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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
 
biCompression[ 0 ]
biSizeImage[ 185729024 ]
biWidth[ 12845056 ]
biHeight[ 65536 ]
Merci de votre aide.