Section courante

A propos

Section administrative du site

Introduction

L'extension de fichier .BMP (abréviation de Bitmap) est format d'image développé par les entreprises Microsoft et IBM pour les systèmes d'exploitation Windows ou d'OS/2. Les format BMP de Windows 2.x et OS/2 1.x sont identiques, par contre les versions suivantes de BMP ont des structures de données totalement différent entre les versions Bitmap d'OS/2 et du Bitmap de Windows. Dans les deux cas, le format Bitmap est un format à usage général pour l'entreposage de bitmaps indépendants du périphérique (appelés DIB pour faire court). Il est le plus souvent utilisé pour entreposer des images générées pour un écran et pour la numérisation d'image. Sa conception de base en fait un bon format à usage général pouvant être utilisé pour l'entreposage d'images en couleur ou en noir et blanc si la taille du fichier n'est pas un facteur. Ses principales vertus sont sa simplicité et son large soutien sur le marché des micro-ordinateurs PC.

Structure d'entête du fichier du format Bitmap de Windows

La structure de l'entête est définit dans le fichier d'entête de langage de programmation C appelé «windows.h» du SDK de Windows. La structure d'entête du fichier est situé au début de chacun des fichiers Bitmap de Windows et contient les informations suivantes :

Déplacement Taille Description
0 2 octets Ce champ permet d'indiquer la signature «BM»
2 2 octets Ce champ permet d'indiquer la taille de la structure d'information.
4 4 octets Ce champ est réservé.
8 4 octets Ce champ permet d'indiquer le déplacement en bits
12 4 octets Ce champ permet d'indiquer la taille de l'image de Bitmap
16 4 octets Ce champ permet d'indiquer la largeur du Bitmap.
20 4 octets Ce champ permet d'indiquer la hauteur du Bitmap.
24 1 mot Ce champ permet d'indiquer le nombre de plages.
26 1 mot Ce champ permet d'indiquer le nombre de bits par pixel.
28 4 octets Ce champ permet d'indiquer le type de compression.
32 4 octets Ce champ permet d'indiquer la taille de l'image.
36 4 octets Ce champ permet d'indiquer l'échelle de pixel par mètre à l'horizontale.
40 4 octets Ce champ permet d'indiquer l'échelle de pixel par mètre à la verticale.
44 4 octets Ce champ permet d'indiquer le nombre de couleurs indexées dans la table des couleurs.
48 4 octets Ce champ permet d'indiquer le nombre de couleurs indexées requis pour afficher le Bitmap.

Structure d'un fichier du format Bitmap d'OS/2

Les fichiers Bitmap d'OS/2 se produisent dans deux révisions principales (v1.x et v2.x) et dans six variantes différentes : Bitmap, Bitmap Array, Icône, Icône couleur, Pointeur et Pointeur couleur. Le fichier BMP typique contient quatre sections de données : l'entête de fichier (FileHeader), l'entête Bitmap (BitmapHeader), la palette de couleurs (ColorPalette) et les données Bitmap (BitmapData).

Structure d'entête du fichier du format Bitmap d'OS/2 (FileHeader)

La structure de données de l'entête est documenté dans le IBM Developer's Toolkit for OS/2 Warp et le Presentation Manager Software Development Kit proposé par l'entreprise IBM. La structure d'entête du format Bitmap d'OS/2 commencent par une structure d'entête de fichier situé au début du fichier et ayant une longueur de 14 octets. La structure d'entête de fichier à donc le format suivant :

Déplacement Taille Description
0 2 octets Ce champ permet d'indiquer la valeur des signatures reconnus :
Valeur Valeur numérique Description
"BA" 4142h Cette valeur permet d'indiquer un Bitmap Array.
"BM" 4D42h Cette valeur permet d'indiquer un Bitmap.
"CI" 4943h Cette valeur permet d'indiquer un icône couleur.
"CP" 5043h Cette valeur permet d'indiquer un pointeur de souris couleur.
"IC" 4349h Cette valeur permet d'indiquer un icône.
"PT" 5450h Cette valeur permet d'indiquer un pointeur.
2 4 octets Ce champ permet d'indiquer la taille du fichier en octets.
6 2 octets Ce champ permet d'indiquer la coordonnée X du point centrale.
8 2 octets Ce champ permet d'indiquer la coordonnée Y du point centrale.
10 4 octets Ce champ permet d'indiquer la position de départ des données d'image en octets, soit entre le début du fichier et les données de pixel correspondant à l'entête.

Si votre application utilise uniquement des fichiers BMP de signature «BM», assurez-vous de toujours vérifier ce champ avant d'essayer d'utiliser l'une des données lues dans le fichier. Le champ de taille contient la taille combinée de l'entête de fichier (FileHeader) plus l'entête Bitmap (BitmapHeader) en octets. Cette valeur est généralement nulle dans de nombreux fichiers Bitmap. Les point centrales sont relatives au coin inférieur gauche du Bitmap. S'il n'y a pas de coordonnée centrale, ces valeurs seront nulles. Ces valeurs ne sont pas utilisées dans les fichiers Bitmap et des tableaux matriciels.

Structure de l'entête Bitmap d'IBM OS/2 1.x (BitmapHeader)

Après la structure d'entête du fichier du format Bitmap d'OS/2 (FileHeader) dans les fichiers BMP v1.x se trouve un deuxième entête appelé entête Bitmap (BitmapHeader). Cet entête contient des informations spécifiques aux données Bitmap. Cet entête fait 12 octets et a le format suivant :

Déplacement Taille Description
0 4 octets Ce champ permet d'indiquer la taille de l'entête Bitmap (BitmapHeader) en octets.
4 2 octets Ce champ permet d'indiquer la largeur de l'image en pixels.
6 2 octets Ce champ permet d'indiquer la hauteur de l'image en pixels.
8 2 octets Ce champ permet d'indiquer le nombre de plans de couleur.
10 2 octets Ce champ permet d'indiquer le nombre de bits par pixel.

La taille contient la taille de l'entête en octets. Pour les fichiers BMP OS/2 1.x, cette valeur est toujours 12. La largeur et la hauteur sont respectivement la largeur et la hauteur de l'image en pixels. La largeur n'inclut aucun remplissage de limite de ligne de balayage. Le nombre de plans de couleur contient une représentation des données Bitmap. Les fichiers Bitmap d'OS/2 ne contiennent qu'un seul plan de couleur, cette valeur est donc toujours 1. La taille apparente d'un plan en bits est calculée par la formule mathématique suivante :

Largeur x Hauteur x Bits par pixel = Taille d'un plan en bits

La taille réelle d'un plan comprend le remplissage de la ligne de balayage. Le nombre de bits par pixels contient une valeur comprise entre 1 et 24; les valeurs 1, 4, 8 et 24 sont les seules valeurs considérées comme autorisé par l'API OS/2 1.x.

Structure de la palette de couleur d'OS/2 v1.x (ColorPalette)

Après l'entête Bitmap se trouvent les données de la palette de couleurs. Une palette de couleurs est toujours présente dans un fichier BMP si les données Bitmap contiennent des données 1, 4 ou 8 bits. Les données bitmap à 24 bits n'utilisent jamais de palette de couleurs (et n'en ont jamais besoin). Chaque élément de la palette a une longueur de trois octets et a la structure suivante :

Déplacement Taille Description
0 1 octet Ce champ permet d'indiquer la composante de bleu.
1 1 octet Ce champ permet d'indiquer la composante de vert.
2 1 octet Ce champ permet d'indiquer la composante de rouge.

La composante de bleu, de vert et de rouge contiennent les valeurs des composantes de couleur pour un pixel, chacune dans la plage de 0 à 255. La taille de la palette de couleurs est calculée à partir de la valeur de bits par pixel. La palette de couleurs a 2, 16, 256 ou 0 entrées pour un bits par pixel de 1, 4, 8 et 24, respectivement. Le nombre d'entrées de palette de couleurs est calculé selon la formule mathématique suivante :

1 << Bits par pixel = Nombre d'entrées

Pour détecter la présence d'une palette de couleurs dans un fichier Bitmap (plutôt que de simplement supposer qu'une palette de couleurs existe), vous pouvez calculer le nombre d'octets entre l'entête Bitmap et les données Bitmap et diviser ce nombre par la taille d'un seul élément de palette. En supposant que votre code est compilé en utilisant l'alignement des éléments de structure à 1 octet, le calcul en langage de programmation C aura l'aspect suivant :

NumberOfEntries = (BitmapOffset - sizeof(OS2BMPFILEHEADER) - sizeof(OS21XBITMAPHEADER)) / sizeof(OS21XPALETTEELEMENT);

Si NumberOfEntries est égal à zéro, il n'y a pas de données de palette, sinon vous avez le nombre d'éléments dans la palette de couleurs.

Structure de l'entête Bitmap d'IBM OS/2 2.x (BitmapHeader)

Les fichiers Bitmap version 2.x commencent par le même entête de 14 octets que les fichiers Bitmap v1.x avec des champs plus grand. L'entête du fichier est également suivi d'un entête Bitmap, étant une version étendue de l'entête bitmap v1.x. Il est généralement de 64 octets et contient jusqu'à 14 champs supplémentaires :

Déplacement Taille Description
0 4 octets Ce champ permet d'indiquer la taille de l'entête Bitmap (BitmapHeader) en octets.
4 4 octets Ce champ permet d'indiquer la largeur de l'image en pixels.
8 4 octets Ce champ permet d'indiquer la hauteur de l'image en pixels.
12 2 octets Ce champ permet d'indiquer le nombre de plans de couleur.
14 2 octets Ce champ permet d'indiquer le nombre de bits par pixel.
16 4 octets Ce champ permet d'indiquer le schéma de compression selon les valeurs suivantes :
Valeur Description
0 Cette valeur permet d'indiquer que les données ne sont pas compressées.
1 Cette valeur permet d'indiquer que l'algorithme RLE de 8 bits est utilisé.
2 Cette valeur permet d'indiquer que l'algorithme RLE de 4 bits est utilisé.
3 Cette valeur permet d'indiquer que l'algorithme Huffman 1D est utilisé.
4 Cette valeur permet d'indiquer que l'algorithme RLE de 24 bits est utilisé.
20 4 octets Ce champ permet d'indiquer la taille des données Bitmap en octets.
24 4 octets Ce champ permet d'indiquer la résolution X du périphérique d'affichage.
28 4 octets Ce champ permet d'indiquer la résolution Y du périphérique d'affichage.
32 4 octets Ce champ permet d'indiquer le nombre de couleurs que la table d'indice utilise.
36 4 octets Ce champ permet d'indiquer le nombre de couleurs d'indice importante.
40 2 octets Ce champ permet d'indiquer le type d'unité utilisé pour la mesure de résolution.
42 2 octets Ce champ permet d'indiquer l'alignement de 4 octets.
44 2 octets Ce champ permet d'indiquer l'algorithme d'enregistrement.
46 2 octets Ce champ permet d'indiquer l'algorithme de demi-teintes à utilisé.
48 4 octets Ce champ permet d'indiquer la taille 1 de l'algorithme de demi-teintes.
52 4 octets Ce champ permet d'indiquer la taille 2 de l'algorithme de demi-teintes.
56 4 octets Ce champ permet d'indiquer le modèle de couleur utilisé pour le Bitmap.
60 4 octets Ce champ permet d'indiquer une valeur utilisé pour les applications.

La taille contient la taille de l'entête en octets. Cet entête peut varier en taille, le programmeur doit donc faire attention à ne lire que le nombre d'octets indiqué par cette valeur. Les champs non inclus dans la valeur de taille ne sont pas entreposés dans le fichier BMP et leurs valeurs sont supposées être nulles. Par exemple, si la taille est 16, alors seuls les cinq premiers champs (16 octets) de l'entête sont présents. La palette de couleurs commencera à partir du 17ième octet. Si la taille est de 40, seuls les onze premiers champs sont présents. Si cette valeur est 64, alors l'entête entier est présent dans le fichier. Une valeur supérieure à 64 indique une version ultérieure du format Bitmap d'OS/2. La largeur et la hauteur sont respectivement la largeur et la hauteur de l'image en pixels. La largeur n'inclut aucun remplissage de limite de ligne de balayage. Le nombre de plans contient le nombre de plans de couleur utilisés pour représenter les données Bitmap. Les fichiers Bitmap d'OS/2 ne contiennent qu'un seul plan de couleur, cette valeur est donc toujours 1. La taille apparente d'un plan en bits est calculée par la formule mathématique suivante :

Largeur x Hauteur x Bits par pixel = Taille d'un plan en bits

La taille réelle d'un plan comprend le remplissage de la ligne de balayage. Les bits par pixel contient le nombre de bits par pixel dans chaque plan. Cette valeur est comprise entre 1 et 24; les valeurs 1, 4, 8 et 24 sont les seules valeurs considérées comme autorisés par l'API OS/2 2.x. La compression indique le type de méthode de codage utilisé pour compresser les données bitmap. La valeur 0 indique que les données ne sont pas compressées; 1 indique que l'algorithme RLE de 8 bits a été utilisé; 2 indique que l'algorithme RLE 4 bits a été utilisé; 3 indique que l'algorithme Huffman 1D a été utilisé; et 4 indique que l'algorithme RLE 24 bits a été utilisé. La taille des données d'image est la longueur des données de pixels en octets, telle qu'elle est entreposée dans le fichier. Cette valeur peut être nulle pour les Bitmaps non compressés, auquel cas la taille du Bitmap est calculée à partir de la formule suivante :

Largeur x Hauteur x Bits par Pixel = Taille du Bitmap

Cette valeur peut ne jamais être nulle pour les Bitmaps non compressés. Les résolution X et résolution Y sont les résolutions horizontales et verticales du Bitmap. Ces valeurs sont utilisées pour aider le programmeur Bitmap à choisir une résolution appropriée lors de l'impression ou de l'affichage d'un fichier Bitmap. Les unités utilisées pour les valeurs de ces champs sont définies dans le champ de type d'unités. Le nombre de couleurs que la table d'indice est le nombre de couleurs présentes dans la palette. Si cette valeur est nulle et que la valeur de bits par pixel est inférieure à 16, le nombre d'entrées est égal à la taille maximale possible pour la carte de couleurs. Les fichiers Bitmap avec une valeur de bits par pixel de 16 ou plus n'auront pas de palette de couleurs. Cette valeur est calculée en utilisant la valeur du champ de bits par pixel :

1 << Bits par pixel = couleur utilisé

La couleur d'indice importante est le nombre de couleurs significatives dans la palette, déterminé par leur fréquence d'apparition dans les données Bitmap; plus l'occurrence d'une couleur est fréquente, plus elle est importante. Ce champ est utilisé pour fournir un affichage aussi précis que possible lorsque vous utilisez du matériel graphique prenant en charge moins de couleurs que celles définies dans l'image. Par exemple, une image 8 bits avec 142 couleurs peut n'avoir qu'une douzaine de couleurs constituant l'essentiel de l'image. Si ces couleurs pouvaient être identifiées, un adaptateur d'affichage avec une capacité de 16 couleurs seulement pourrait afficher l'image avec plus de précision en utilisant les 16 couleurs les plus fréquentes de l'image. Les couleurs les plus importantes sont toujours entreposées en premier dans la palette; la couleur d'indice importante est 0 si toutes les couleurs de la palette doivent être considérées comme importantes. Le type d'unités contient les valeurs des champs de résolution X et de résolution Y. La seule valeur valide est 0, indiquant les pixels par mètre. Le champ d'alignement de 4 octets est toujours défini sur une valeur de zéro. L'algorithme d'enregistrement spécifie comment les lignes de balayage Bitmap sont entreposées. La seule valeur valide pour ce champ est 0, indiquant que le Bitmap est entreposé de gauche à droite et de bas en haut, l'origine étant dans le coin inférieur gauche de l'écran. L'algorithme de demi-teintes contient les données Bitmap. Une valeur de 0 indique qu'aucun algorithme de demi-teintes n'a été utilisé; 1 indique la demi-teinte de diffusion d'erreur; 2 indique l'algorithme de traitement pour l'acquisition de documents non codés (PANDA); et 3 indique un demi-cercle super-cercle. La taille 1 et la taille 2 sont des champs sont réservés uniquement par l'algorithme de demi-teintes. Si la demi-teinte de diffusion d'erreur est utilisée, la taille 1 correspond à l'amortissement d'erreur sous forme de pourcentage compris entre 0 et 100. Une valeur de 100% indique l'absence d'amortissement et une valeur de 0% indique qu'aucune erreur n'est diffusée. La taille 2 n'est pas utilisée par les demi-teintes de diffusion d'erreur. Si PANDA ou demi-teintes super-cercle est spécifié, la taille 1 est la dimension X et la taille 2 est la dimension Y du motif utilisé en pixels. Le modèle de couleur contient la définition des données Bitmap. La seule valeur valide est 0, indiquant le schéma de codage RVB (Rouge-Vert-Bleu). La valeur d'application est un champ réservé à l'utilisation de l'application et peut contenir une valeur spécifique à l'application.

Structure de la palette de couleur d'OS/2 v2.x (ColorPalette)

La palette de couleurs pouvant suivre l'entête Bitmap est fondamentalement la même que la palette v1.x, mais ajoute un octet supplémentaire de remplissage pour augmenter sa taille à 4 octets. Cette situation permet aux entrées de palette d'être lues comme des valeurs de 4 octets, ce qui rend ces valeurs plus efficaces à lire en mémoire et plus faciles à voir dans un vidage hexadécimal ou un débogueur.

Déplacement Taille Description
0 1 octet Ce champ permet d'indiquer la composante de bleu.
1 1 octet Ce champ permet d'indiquer la composante de vert.
2 1 octet Ce champ permet d'indiquer la composante de rouge.
3 1 octet Ce champ permet d'indiquer vaut toujours 0.

Le bleu, le vert et le rouge contiennent les valeurs des composantes de couleur pour un pixel, chacune dans la plage de 0 à 255. La valeur réservé remplit la structure pour se terminer sur une limite d'octets pairs et est toujours 0. Lors de l'identification des fichiers Bitmap, vous devez vous assurer que les deux premiers octets du fichier sont 4Dh 42h et lire uniquement le nombre d'octets de l'entête du Bitmap comme indiqué par le champ de taille. Cette valeur sera 12 pour les fichiers Bitmap d'OS/2 1.x et inférieure ou égale à 64 pour les fichiers Bitmap d'OS/2 2.x. L'entête du fichier est identique pour les deux versions; la seule différence dans l'entête Bitmap est que les champs de largeur et de hauteur sont des mots (2 octets) dans les fichiers v1.x et des doubles mots (4 octets) dans les fichiers v2.x.

Remarques

Exemple

Voici un exemple montrant la structure de ce format suivant en Turbo Pascal 7 :

  1. Type
  2.   {Entête de fichier de format BitMap Windows}
  3.  HeaderBMP=Record
  4.   Sign:Array[0..1]of Char;
  5.   Size,Reserved0,OffBits:LongInt;
  6.   biSize,NumXPixels,NumYPixels:LongInt;
  7.   Planes,BitCount:Word;
  8.   Compression,SizeImage:LongInt;
  9.   XPelsPerMeter,YPelsPerMeter,ClrUsed,ClrImportant:LongInt;
  10.  End;

Voir également

Index des extensions de fichier - Format d'icône pour Windows (.ICO)
Langage de programmation - C pour Windows - Structure de données de Windows - «BITMAPINFOHEADER»
Index des extensions de fichier - Format de fichier compressé pour Windows (.CAB)
Langage de programmation - Traitement d'image - Accueil

Dernière mise à jour : Mardi, le 24 juin 2014