Format BMP — structure et usages du fichier bitmap Windows
Le BMP, bitmap de Windows : en-têtes, table de couleurs, pourquoi il est si lourd, stockage de bas en haut et cas où il reste utile.
Le BMP est le format de fichier qui stocke les bitmaps indépendants du périphérique (DIB) utilisés par Microsoft Windows et OS/2. Il ne s'agit pas d'une norme fixée par un organisme international : ce sont les documents de développement de Microsoft qui servent de spécification de fait. Sa principale caractéristique est sa structure simple, que n'importe quel programme peut facilement lire et écrire.
Structure du fichier
Selon le document « Bitmap Storage » de Microsoft Learn, un fichier BMP se compose des éléments suivants, dans cet ordre.
| Ordre | Élément | Contenu |
|---|---|---|
| 1 | BITMAPFILEHEADER | Identifiant du fichier (BM), taille du fichier, position du début des données de pixels |
| 2 | BITMAPINFOHEADER (ou en-tête V4 / V5) | Largeur et hauteur en pixels, bits par pixel, méthode de compression, résolution |
| 3 | Table de couleurs (tableau de RGBQUAD) | Utilisée par les images 1, 4 et 8 bits à palette |
| 4 | Tableau de pixels | Données réelles de l'image |
Les deux premiers octets du fichier étant BM en ASCII (42 4D en hexadécimal), cette signature permet de reconnaître un BMP même si son extension a été modifiée. L'en-tête d'information comporte aussi un champ pour la résolution d'impression (pixels par mètre).
Stockage de bas en haut
Un BMP classique stocke les pixels de la ligne du bas vers la ligne du haut (bottom-up). Si la hauteur indiquée dans l'en-tête est négative, le stockage se fait de haut en bas (top-down). Par ailleurs, des octets de remplissage sont ajoutés à la fin de chaque ligne pour que son nombre d'octets soit un multiple de 4. Ce sont des erreurs fréquentes lorsqu'on écrit soi-même un programme de lecture de BMP.
Exemple de calcul de la taille d'une ligne
Chaque ligne d'un BMP doit être alignée sur 4 octets. Pour une image 24 bits de 101 pixels de large, les données réelles d'une ligne font 101 × 3 = 303 octets ; on ajoute 1 octet de remplissage pour atteindre un multiple de 4 et la ligne est stockée sur 304 octets. La taille totale des données de pixels est donc (octets par ligne) × hauteur en pixels, à laquelle on ajoute l'en-tête (généralement 54 octets) pour obtenir la taille du fichier. À cause de cette règle, les images dont la largeur n'est pas un multiple de 4 provoquent souvent des erreurs de décalage d'une ligne à l'autre lorsqu'on les manipule directement.
Pourquoi il est si lourd
Le BMP stocke le plus souvent les pixels bruts sans compression. Un BMP 24 bits utilise 3 octets par pixel : une image de 1920×1080 pèse environ 6,2 Mo, et une photo de smartphone de 4032×3024 environ 36,6 Mo. Pour les images à palette de 8 bits ou moins, on peut choisir la compression RLE (codage par plages), mais elle est presque sans effet sur les photos. MDN recommande d'ailleurs d'éviter le BMP pour les contenus web à cause de son poids.
Transparence
Le BMP 24 bits traditionnel n'a pas de canal alpha. Un BMP 32 bits utilisant les en-têtes V4 ou V5 peut définir un masque alpha, mais de nombreux programmes ne l'interprètent pas correctement comme de la transparence : pour échanger des images transparentes, le PNG est plus sûr.
Quand utilise-t-on encore le BMP
- Lorsque d'anciens équipements industriels, des appareils embarqués, des imprimantes de tickets ou certains logiciels internes n'acceptent que le BMP
- Pour des programmes simples ou des exemples pédagogiques qui doivent manipuler les pixels tels quels, sans compression ni décompression
- Comme mode de stockage des petites images à l'intérieur des icônes Windows (ICO)
Précautions de conversion
- BMP → PNG : sans perte, et le poids diminue fortement. C'est la meilleure conversion pour l'archivage et le partage.
- BMP → JPG : pour une photo, le poids est divisé par plusieurs dizaines, mais une compression avec perte est appliquée.
- Autre format → BMP : vérifiez la profondeur exigée par l'appareil (24 bits ou 8 bits). Les zones transparentes sont remplies avec la couleur de fond. Le convertisseur de format d'image permet d'enregistrer en BMP.
Essayer maintenant