Windows bitmap

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir BMP.
Windows bitmap
Extension .bmp
Type MIME image/bmp
image/x-ms-bmp
(non officiel)
Type de format Image matricielle

Bitmap, connu aussi sous son abréviation BMP, est un format d'image matricielle ouvert développé par Microsoft et IBM. 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.

Organisation du fichier[modifier | modifier le code]

Le fichier se découpe en trois zones :

  • l'en-tête du fichier ;
  • la palette de couleurs ;
  • les données relatives à l'image.

Format du fichier[modifier | modifier le code]

Le fichier se découpe en deux parties, à savoir :

  • les données relatives au fichier, l'entête :
Offset# Taille Valeur
0x0000 2 octets le nombre magique correspondant à l'utilisation du fichier BMP
  • BM - Windows 3.1x, 95, NT, etc.
  • BA - OS/2 Bitmap Array
  • CI - OS/2 Icône Couleur (Color Icon)
  • CP - OS/2 Pointeur Couleur (Color Pointer)
  • IC - OS/2 Icône (Icon)
  • PT - OS/2 Pointeur (Pointer)
0x0002 4 octets la taille du fichier BMP en octets
0x0006 2 octets réservé pour l'identifiant de l'application qui a créé le fichier
0x0008 2 octets réservé pour l'identifiant de l'application qui a créé le fichier
0x000A 4 octets l'offset (l'adresse de départ) du contenu du BMP
  • les données relatives à l'image.

On trouve notamment la taille du fichier en octets, l'emplacement de début des données, le nombre de bits par pixels dans l'image, le type de compression utilisé, le nombre de couleurs dans la palette, la largeur et la longueur de l'image, etc.

Palette[modifier | modifier le code]

Les logiciels de lecture utilisent trois octets pour coder la couleur (système rouge vert bleu, RVB) :

  • en BMP 24 bits (1 octet bleu, 1 octet vert, 1 octet rouge par pixel), la palette n'est pas nécessaire (on peut représenter toutes les couleurs). Dans ce cas, la palette n'existe pas dans le fichier BMP ;
  • en BMP 8 bits, on ne peut représenter que 256 couleurs, il faut définir une correspondance entre la couleur du pixel et les trois composantes. Il a donc été ajouté une table juste après l'en-tête (octet 56), qui donne pour chaque valeur (de 0 à 255) les trois composantes RVB qui y correspondent).

La palette est donc une table de correspondance de type

Valeur à afficher RVB
0 R=r0, B=b0, V=v0 + octet 00
255 R=r255, B=b255, V=v255 + octet 00

Par exemple, pour une image en niveaux de gris (256 nuances), les trois valeurs R, V et B seront égales et varieront entre 0 et 255.

La structure du fichier BMP devient donc :

  • en-tête
  • palette à l'octet 54 (36 en hexadécimal) ;
  • image à l'octet 1 078 (0436 en hexadécimal) ;

il faut tenir compte de cela lors du calcul de l'en-tête. Il existe également un format BMP sur 4 et 2 bits.

Nombre de couleurs[modifier | modifier le code]

Le format BMP supporte plusieurs variantes, selon le nombre de couleurs possibles souhaitées. La profondeur de couleurs est le nombre de bits associés à chaque pixel pour en coder la couleur.

Ainsi, les images BMP peuvent être en 2 couleurs (bit), 16 couleurs (4 bits), 256 couleurs (8 bits), 65 536 couleurs (16 bits) ou 16,8 millions de couleurs (24 bits).

Les images 24 bits possèdent trois canaux de 8 bits pour les trois lumières primaires (rouge, vert, bleu) qui peuvent prendre chacune 256 valeurs différentes. Les images en 256 niveaux de gris sont possibles avec un seul canal de 8 bits.

Taille du fichier[modifier | modifier le code]

Le format BMP est quasiment inexistant sur le Web : il ne dégrade pas l'image et n'utilise généralement pas de compression, aussi est-il très lourd. Il existe néanmoins la compression RLE pour le format BMP.

Pour calculer la taille approximative du fichier BMP final, on multiplie la profondeur couleurs (1, 4, 8, 16 ou 24 bits) par la hauteur et par la largeur en pixels : (Profondeur de couleurs en bits) × (Hauteur en pixels) × (Largeur en pixels) bits.

Par exemple, une image en 800 × 600 (800 pixels de large par 600 pixels de haut) en 24 bits (16,8 millions de couleurs) aura une taille de (800 × 600 × 24) bits soit 1,44 Mo (1,37 Mio) ou encore la taille des disquettes 3″½ haute densité (une telle image ne pourra donc pas être enregistrée sur une disquette 1.44 Mo à cause notamment de la table d'allocation des fichiers qui prend une certaine place, tout comme l'en-tête de l'image).

Disposition des données de l'image[modifier | modifier le code]

Contrairement à la plupart des formats d'images, les pixels de l'image sont codés en partant de la ligne inférieure de l'image. Chaque ligne (codée de gauche à droite) doit toujours occuper un nombre d'octets multiple de 4, excepté si l'image est compressée. Si la ligne ne possède pas un nombre d'octets multiple de 4, on remplit la ligne en ajoutant des zéros.

Si l'image est codée en 24 bits, chaque pixel est codé par un entier 24 bits (RVB), ordre little-endian, c'est-à-dire que les trois octets codent successivement les niveaux de bleu, vert et rouge.

Si l'image est codée avec moins de 24 bits, chaque pixel est codé sous la forme d'un index dans la table de couleurs (la palette), d'où l'appellation « image indexée ». Dans le cas des images codant les pixels sur 1 bit ou 4 bits, c'est-à-dire si plusieurs pixels sont codés dans un même octet, les bits de poids fort concernent le pixel le plus à gauche.

Compression[modifier | modifier le code]

Le format BMP permet l'utilisation de l'algorithme de compression RLE pour les images 8 bits (256 couleurs) et 4 bits (16 couleurs).

La compression est rarement proposée par les logiciels de dessins courants car elle n'est pas supportée nativement par les versions de Windows antérieures à Windows XP.

Le principe :

  • Un octet compris entre 1 et 255 indique le nombre de pixels pour lesquels il faut utiliser l'information contenue dans l'octet suivant ;
  • Un octet à 0 indique une action spéciale, il est suivi d'un second octet :
    • S'il vaut 0, la fin de ligne est atteinte, passer à la ligne suivante ;
    • S'il vaut 1, la fin de l'image est atteinte, fin de lecture ;
    • S'il vaut 2, sauter X colonnes et Y lignes avant de poursuivre (X et Y étant chacun codé sur 1 octet) ;
    • S'il vaut entre 3 et 255, il s'agit du nombre de pixels qui suivent, codés comme des données non compressées. Dans ce cas-là, il faut éventuellement sauter un octet inutilisé afin que le nombre d'octets soit pair.

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Liens externes[modifier | modifier le code]