Bonjour,
Je viens de faire un programme qui lit les informations d'un BMP (cf. ici (https://fr.wikipedia.org/wiki/Windows_bitmap) pour plus de détails).
Mais ne m'affiche pas ce que je veux. Dès le deuxième printf sa foire (i m'affiche une taille de 0 octet).
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <stdio.h>
#include <stdlib.h>
 
#include "constants.h"
 
typedef struct {
 
    /* Entête du fichier */
    unsigned char signature[2]; /* Signature sur 2 octets */
    unsigned int fsize; /* Taille du fichier sur 4 octets */
    unsigned int field; /* Champ réservé sur 4 octets */ 
    unsigned int offset; /* Adresse de départ de l'image sur 4 octets */
 
    /* Entête de l'image */
    unsigned int hsize; /* Taille de l'entête de l'image sur 4 octets */
    unsigned int width; /* Largeur de l'image sur 4 octets */
    unsigned int height; /* Hauteur de l'image sur 4 octets */
    unsigned int plane; /* Nombre de plan sur 2 octets */
    unsigned int bits; /* Profondeur de codage de la couleur (nombres de bits) sur 2 octets */
    unsigned int compression; /* Méthode de compression de l'image sur 4 octets */
    unsigned int isize; /* Taille de l'image sur 4 octets */
    unsigned int wresolution; /* Résolution horizontale sur 4 octets */
    unsigned int hresolution; /* Resolution verticale sur 4 octets */
    unsigned int cnumber; /* Nombre de couleurs de la palette sur 4 octets */
    unsigned int icnumber; /* Nombre de couleurs importante de la palette sur 4 octets */
 
    /* Palette de l'image */
 
    /* Codage de l'image */
 
} BMP;
 
void BmpInfo(BMP bmp)
{
    clrsrc();
 
    printf("Information relative au fichier :\n\n");
 
    printf("Type de fichier : ");
        if(bmp.signature[0] == 'B' && bmp.signature[1] == 'M')
            printf("Bitmap Windows\n");
        else if(bmp.signature[0] == 'B' && bmp.signature[1] == 'A')
            printf("Bitmap OS/2\n");
        else if(bmp.signature[0] == 'C' && bmp.signature[1] == 'I')
            printf("Icone couleur\n");
        else if(bmp.signature[0] == 'C' && bmp.signature[1] == 'P')
            printf("Pointeur de couleur\n");
        else if(bmp.signature[0] == 'I' && bmp.signature[1] == 'C')
            printf("Icone\n");
        else if(bmp.signature[0] == 'P' && bmp.signature[1] == 'T')
            printf("Pointeur\n");
 
    printf("Taille du fichier : %u o\n", bmp.fsize);
    printf("Champ réservé : %u\n", bmp.field);
    printf("Offset : %u\n", bmp.offset);
    printf("Entête de l'image : %u\n", bmp.hsize);
    printf("Largeur de l'image : %u\n", bmp.width);
    printf("Hauteur de l'image : %u\n", bmp.height);
    printf("Nombre de plan : %u\n", bmp.plane);
    printf("Nombre de bits : %u\n", bmp.bits);
    printf("Type de compression : %u\n", bmp.compression);
    printf("Taille de l'image : %u\n", bmp.isize);
    printf("Résolution horizontale : %u\n", bmp.wresolution);
    printf("Résolution verticale : %u\n", bmp.hresolution);
    printf("Nombre de couleurs : %u\n", bmp.cnumber);
    printf("Nombre de couleurs importante : %u\n", bmp.icnumber);
 
}   
 
int main(void)
{
    int i = 0;
    FILE *image = NULL;
    BMP bmp = {0};
 
    image = fopen("image.bmp", "rb");
    if(image != NULL)
    {
        fread(&bmp, sizeof(bmp), 1, image);
 
        if((bmp.signature[0] == 'B' && bmp.signature[1] == 'M') || \
           (bmp.signature[0] == 'B' && bmp.signature[1] == 'A') || \
           (bmp.signature[0] == 'C' && bmp.signature[1] == 'I') || \
           (bmp.signature[0] == 'C' && bmp.signature[1] == 'P') || \
           (bmp.signature[0] == 'I' && bmp.signature[1] == 'C') || \
           (bmp.signature[0] == 'P' && bmp.signature[1] == 'T'))
               BmpInfo(bmp);
        else
        {
            printf("Problème lors de la lecture du fichier\n");
            printf("Le fichier ne semble pas correspondre au type de fichier demandé\n");
        }
 
        fclose(image);
    }
    else
    {
        printf("Unable to load image.bmp\n");
        return EXIT_FAILURE;
    }
 
    return EXIT_SUCCESS;
}