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