Le format BMP est un format d'image développé par Windows et IBM. Il s'agit d'un fichier BitMap,
c'est-à-dire un fichier d'image graphique stockant les pixels sous forme de tableau de points et
gérant les couleurs, soit en couleur vraie, soit grâce à une palette indexée (noir et blanc,
16 couleurs ou 256 couleurs).
C'est un des formats d'images les plus simples à développer et à utiliser pour programmer. Il est
lisible par quasiment tous les visualiseurs et éditeurs d'images.
Un fichier bitmap est un fichier binaire, composé de trois voir quatre parties :
Vous trouverez ci-dessous un exemple, ainsi qu'un script permettant l'extraction des propriétés d'un fichier BitMap. Enfin, je laisse à votre disposition un comparatif effectué entre différents types de BitMap.
L'entête du fichier indique les caractéristiques principales du fichier : son type (BitMap), sa taille, et l'emplacement du début de l'image.
L'entête du fichier est composé de 4 champs :
L'entête de l'image donne les caractéristiques de l'image comme sa taille, sa résolution, le nombre de couleurs ...
L'entête de l'image est composé de 11 champs :
La palette, ou table des couleurs, n'existe que pour les images de 1, 4 ou
8 bits/pixel.
Elle contient la liste des couleurs dans l'espace RVB. Chaque couleur de la palette est définie sur
4 octets :
Variable en fonction du nombre de bits/pixel de l'image, la taille de la palette est calculée de
la façon suivante :
L'image est codée de bas en haut et de gauche à droite.
Chaque ligne doit comporter un nombre d'octets multiple de 4 octets, si ce n'est pas le cas, la ligne
doit être complétée par des 0 pour y parvenir ; cette règle s'applique si l'image n'est pas compressée.
Si l'image est codée en 24 bits, chaque pixel est codé sur 3 octets (RVB inversé), soit 1 octet
pour le bleu, 1 pour le vert et 1 pour le rouge.
Si l'image est codée avec moins de 24 bits, chaque pixel est codé sous la forme d'un index dans la palette.
Les images en monochrome sont codées sur 1 bit par pixel, ainsi un octet représente 8 pixels.
Les images en 16 couleurs sont codées sur 4 bits par pixels, ainsi un octet représente 4 pixels.
Les images en 256 couleurs sont codées sur 8 bits par pixels, ainsi un octet représente 1 pixel.
Dans le cas d'images codées sur 1 ou 4 bits, les bits de poids forts concernent les pixels les plus à gauche.
Le format BitMap utilise l'algorythme de compression RLE (Run Lenght Encoding). Le principe est de regrouper une suite de points de même couleur : au lieu de coder A4 A4 A4 A4 A4 A4, il sera codé : 06 A4. Le premier octet indique le nombre de pixels consécutifs de même couleur (deuxième octet).
Si le premier des deux octets est égal à 0, cela indique une séquence spéciale, il est alors suivit d'un second octet :
Cette compression peut être utilisée pour les images 256 couleurs (8 bits/pixel) et 16 couleurs (4 bits/pixel).
Quoi qu'il en soit, les machines informatiques étant de plus en plus puissantes, cette compression n'est plus utilisée ; de plus, cette méthode n'est efficace que pour les images de synthèse (créées artificiellement), car elles contiennent beaucoup de pixels de même couleurs, alors que les images naturelles, comme les photos, n'en contiennent quasiment pas, ce qui peut amener alors à une augmentation de la taille du fichier.
Afin de concrétiser la théorie, ouvrons un fichier BitMap de 3x3 pixels avec un éditeur hexadécimal. Vous pouvez télécharger le fichier d'exemple en cliquant sur l'image ci-dessous.
![]() |
Cette image est composée de 9 pixels :
|
Après avoir ouvert le BitMap, nous pouvons repérer les champs suivants :
L'entête du fichier est composé de :
L'entête de l'image est composé de :
Nous avons vu précédemment qu'il s'agissait d'un fichier 24 bits/pixel, aussi, chaque pixel est
codé sur 3 octets. L'image a 3 pixels de large, soit 3x3=9 octets d'information. Il faut qu'une ligne
comporte un multiple de 4 octets, ainsi il devrait y avoir un remplissage de 12-9=3 octets.
C'est ce que nous observons : 3x3 octets d'information de couleur RVB inversé (en vert), suivit de
3 octets de remplissage (en marron). Et ce pour chaque ligne de l'image.
Ce script permet l'extraction des propriétés d'un fichier BitMap (2 Mo maxi).
Afin de comparer les différents types d'entêtes de fichiers BitMap, vous pouvez télécharger un zip contenant 8 BitMaps :
Dernière modification de cette page le 11 novembre 2014 à 14:03
Sauf mention contraire, le contenu de cette page est sous licence Creative Commons Paternité et Conditions de partage à l'identique
Page générée en 238.935 millisecondes | Votre adresse IP : 3.22.208.84 | Me contacter