Aller au contenu principal

Formats de fichiers

Qu'est-ce que le BMP ? Le format bitmap expliqué

Le BMP est le format bitmap non compressé et sans perte de Windows. Voici la structure de ses en-têtes, ses profondeurs de couleur, ses limites et comment alléger ces fichiers.

Auteur: Hemen Dönüştür Editör EkibiPublié le: 9 min de lecture

Image de couverture du guide sur le format de fichier BMP

Le BMP est l'un des formats d'image les plus anciens et les plus simples de l'univers Windows. Un fichier BMP écrit en général les pixels sur le disque ligne par ligne, sans la moindre compression. Cette simplicité le rend facile à lire et sans perte, mais c'est aussi elle qui produit des fichiers énormes. Cet article retrace les origines du BMP, détaille le contenu du fichier, les subtilités de la profondeur de couleur et de la transparence, les endroits où on le croise encore aujourd'hui et la façon de convertir un BMP en formats plus pratiques.

Qu'est-ce que le BMP ?

Le BMP (bitmap, extension .bmp) est un format de fichier d'image matricielle, fondé sur les pixels. La documentation technique l'appelle aussi DIB, pour device-independent bitmap, c'est-à-dire bitmap indépendant du périphérique. Cela signifie que l'image peut être interprétée de la même façon quelle que soit la carte graphique ou l'imprimante sur laquelle elle a été créée : le fichier transporte dans son propre en-tête et sa table de couleurs les informations nécessaires pour décoder ses couleurs.

Selon la documentation Win32 de Microsoft, un fichier bitmap commence par une structure BITMAPFILEHEADER, suivie d'un BITMAPINFOHEADER, BITMAPV4HEADER ou BITMAPV5HEADER, puis d'une table de couleurs facultative et enfin des données de pixels. Son type MIME est image/bmp.

Un peu d'histoire : de Windows et OS/2 à aujourd'hui

Le BMP est né du travail commun de Microsoft et d'IBM sur Windows et OS/2 à la fin des années 1980. À l'époque de Windows 1.0, les bitmaps dépendaient fortement du périphérique de sortie ; la forme indépendante du périphérique s'est généralisée avec Windows 3.0 en 1990. C'est au BITMAPCOREHEADER de 12 octets, défini pour OS/2 Presentation Manager, que l'on doit l'expression « BMP OS/2 » encore utilisée aujourd'hui.

Au fil des années, le format a été étendu en ajoutant des champs à la fin de l'en-tête. Selon la description de format de la Library of Congress, la version 5 est arrivée avec Windows 98 en 1998 et a permis d'enregistrer des profils de couleur ICC dans le fichier. Voici les tailles d'en-tête courantes aujourd'hui :

En-têteTaillePrincipal apport
BITMAPCOREHEADER12 octetsStructure de base compatible avec OS/2 1.x
BITMAPINFOHEADER40 octetsL'en-tête le plus répandu, depuis Windows 3.0 ; champs de compression et de résolution
BITMAPV4HEADER108 octetsMasques de couleur, masque alpha et informations d'espace colorimétrique
BITMAPV5HEADER124 octetsProfils ICC intégrés ou liés, intention de rendu

Les lecteurs identifient l'en-tête utilisé grâce à la taille indiquée dans son premier champ. Les anciens logiciels peuvent ainsi ignorer les nouveaux champs tout en lisant l'essentiel.

À l'intérieur d'un fichier BMP

L'en-tête de fichier et la signature « BM »

Tout fichier BMP commence par un en-tête de fichier de 14 octets dont les deux premiers sont les caractères ASCII BM (42 4D en hexadécimal). Cet en-tête stocke la taille totale du fichier et la position, en octets, du début des données de pixels. Un DIB placé dans le presse-papiers de Windows (le format CF_DIB) se passe de ces 14 octets et commence directement par l'en-tête d'informations.

L'en-tête d'informations

L'en-tête d'informations contient la largeur, la hauteur, le nombre de bits par pixel (biBitCount), le type de compression, la résolution horizontale et verticale (en pixels par mètre) et le nombre de couleurs utilisées dans la table de couleurs.

La table de couleurs (palette)

Dans les images de 8 bits par pixel ou moins, un pixel n'est pas une couleur mais un indice dans la table de couleurs. Dans l'exemple documenté par Microsoft, un bitmap de 32x32 en 16 couleurs a un tableau de pixels de 32 x 32 x 4 = 4096 bits, car 4 bits suffisent pour désigner 16 couleurs.

Les données de pixels : lignes de bas en haut et alignement sur 4 octets

Le BMP a deux particularités. D'abord, si la hauteur est positive, les lignes sont stockées de bas en haut : la première ligne du fichier est la dernière ligne de l'image. Une hauteur négative stocke les lignes de haut en bas, mais ces images ne peuvent pas être compressées. Ensuite, chaque ligne est complétée pour atteindre un multiple de 4 octets. Microsoft donne ainsi la longueur d'une ligne (stride) :

stride = ((width * bitCount + 31) & ~31) >> 3
imageSize = |height| * stride

Pour une image de 1920x1080 en 24 bits, chaque ligne fait 1920 x 3 = 5 760 octets (déjà un multiple de 4), et les données de pixels occupent donc 5 760 x 1 080 = 6 220 800 octets. Avec les 54 octets d'en-têtes, le fichier pèse environ 6,2 Mo. La même image en JPG n'en représente en général qu'une petite fraction.

Profondeur de couleur, compression et transparence

La documentation de BITMAPV5HEADER définit 1, 4, 8, 16, 24 et 32 bits par pixel (la valeur 0 signifie que la profondeur provient de données JPEG ou PNG intégrées). 1 bit correspond au noir et blanc, 4 bits à 16 couleurs et 8 bits à une palette de 256 couleurs. En 24 bits, chaque pixel occupe trois octets, dans l'ordre bleu, vert, rouge.

Le champ de compression peut prendre les valeurs suivantes :

  • BI_RGB : sans compression. En pratique, l'immense majorité des fichiers BMP.
  • BI_RLE8 et BI_RLE4 : codage par plages simple pour les images à palette de 8 et 4 bits. Utile pour les grands aplats, presque inutile pour les photos.
  • BI_BITFIELDS : il ne s'agit pas d'une compression ; des masques indiquent où se trouvent les bits rouges, verts et bleus dans les pixels de 16 et 32 bits (par exemple RVB 565).
  • BI_JPEG et BI_PNG : permettent de placer des données JPEG ou PNG dans le bitmap. Rarement pris en charge par les visionneuses courantes.

La transparence est le point le plus incohérent du BMP. Le masque alpha des en-têtes V4 et V5 peut définir le quatrième octet d'un pixel de 32 bits comme opacité, mais dans un BMP 32 bits classique cet octet est décrit comme inutilisé et beaucoup de logiciels l'ignorent. Il n'est donc pas rare qu'un BMP 32 bits paraisse transparent dans un programme et s'affiche sur fond noir dans un autre. Si vous avez besoin de transparence, le PNG est un choix bien plus sûr.

Prise en charge par les systèmes, navigateurs et logiciels

Le BMP s'ouvre presque partout. Les visionneuses intégrées de Windows et Paint, Aperçu sur macOS et les visionneuses Linux courantes le lisent tous. Le guide des formats d'image de MDN indique que toutes les versions de Chrome, Edge, Firefox, Opera et Safari prennent en charge le BMP. Ce même guide souligne aussi que les fichiers BMP non compressés sont très lourds par rapport au PNG ou au JPG et qu'il vaut mieux, en général, les éviter pour le contenu d'un site web.

Où utilise-t-on encore le BMP ?

  • Ressources d'applications Windows et anciens logiciels : images de barres d'outils, illustrations d'assistants d'installation et certains éléments de jeux sont encore en BMP.
  • Systèmes embarqués et microcontrôleurs : un appareil doté d'un écran n'a pas besoin de décodeur JPEG ; les données de pixels peuvent être copiées directement vers l'écran.
  • Caméras industrielles, scanners et outils de test : quand il faut une sortie brute et sans perte, le BMP est un format intermédiaire simple.
  • Enseignement : avec un en-tête de quelques dizaines d'octets seulement, le BMP est souvent le premier format que les étudiants lisent et écrivent en cours de traitement d'images.

Points forts et points faibles

Points fortsPoints faibles
Sans perte ; les valeurs des pixels ne changent jamaisNon compressé, donc fichiers très lourds
Très simple à lire et à écrire, sans coût processeurPrise en charge incohérente de la transparence
S'ouvre dans presque tous les systèmes d'exploitation et navigateursMétadonnées mal prises en charge (EXIF, descriptions)
Les modes à palette conviennent aux appareils peu puissantsPeu pratique pour le web, l'e-mail et les formulaires d'envoi

Problèmes courants et solutions

Le fichier est trop lourd pour un e-mail ou un formulaire d'envoi

C'est le problème le plus fréquent. Pour les photos et les numérisations, convertir le BMP en JPG divise en général la taille par dix ou plus. Pour les captures d'écran, les schémas ou tout ce qui contient du texte, mieux vaut convertir le BMP en PNG : le PNG est lui aussi sans perte mais compressé, et il n'ajoute pas le bruit que le JPG crée autour des contours nets.

Un BMP 32 bits s'affiche sur fond noir

Le logiciel ne reconnaît pas l'octet alpha ou le lit mal. Une conversion en PNG règle en général le problème. Lors d'une conversion en JPG, format sans transparence, les zones transparentes sont remplies de blanc ou d'une couleur de votre choix.

L'image est à l'envers ou déformée

Dans un lecteur que vous avez écrit vous-même, cela vient en général de deux erreurs : oublier que les lignes sont stockées de bas en haut, ou ne pas sauter les octets de remplissage en fin de ligne. Utiliser la formule du stride ci-dessus et vérifier le signe de la hauteur évite les deux.

Un logiciel refuse d'ouvrir un BMP

Les BMP compressés en RLE, en BI_BITFIELDS ou contenant des données JPEG/PNG intégrées ne sont pas pris en charge par certains lecteurs simples. Les réenregistrer en BMP 24 bits non compressé ou les convertir en PNG supprime le problème de compatibilité.

Conseils de conversion

  • Le JPG pour les photos, le PNG pour les graphismes : la règle habituelle s'applique quand on quitte le BMP. Pour le web, vous pouvez aussi choisir le WebP ou l'AVIF dans le convertisseur d'images.
  • Gardez une qualité élevée : le BMP étant sans perte, une qualité JPG de 85 à 90 % donne un résultat difficile à distinguer de l'original.
  • Réduisez si besoin : si le fichier reste lourd, diminuez ses dimensions en pixels ou utilisez compresser une image pour atteindre une taille cible.
  • Dans l'autre sens : si un appareil embarqué ou un ancien logiciel exige du BMP, choisissez BMP comme format cible dans le convertisseur d'images. Nos outils écrivent un BMP standard 24 bits non compressé ; les zones transparentes sont aplaties sur la couleur de fond que vous choisissez.

Nos pages de conversion BMP fonctionnent dans votre navigateur : le fichier n'est pas envoyé et ne quitte jamais votre appareil.

Questions fréquentes

BMP et DIB, est-ce la même chose ?

En pratique, oui. Un DIB est la structure de bitmap indépendant du périphérique que Windows utilise en mémoire et dans le presse-papiers ; un fichier BMP, c'est cette structure précédée d'un en-tête de fichier de 14 octets.

Le BMP est-il sans perte ?

Oui. Les BMP non compressés et compressés en RLE conservent exactement les valeurs des pixels. La seule exception est le rare BMP contenant des données JPEG intégrées.

Convertir un BMP en PNG fait-il perdre en qualité ?

Non. Le PNG est lui aussi sans perte ; l'image reste identique et devient seulement plus légère grâce à la compression.

Peut-on utiliser le BMP sur un site web ?

Les navigateurs affichent le BMP, mais ses fichiers sont inutilement lourds et ralentissent les pages. Pour le web, utilisez le JPG, le PNG, le WebP ou l'AVIF.

Le BMP gère-t-il la transparence ?

Un BMP 32 bits peut en théorie contenir un canal alpha, mais les logiciels ne le prennent pas en charge de façon cohérente. Dès que vous avez besoin de transparence, le PNG est le choix le plus sûr.

Sources

Convertisseurs associés

Tous les articles