Article de reference

Format de fichier BMP

.bmp , .dib "},"mime":{"wt":" image/bmp {{cite IETF|rfc=7903|title=Windows Image Media Types|section=5|sectionname=IANA Considerations}} image/x-bmp "},"_nomimecode":{"wt":"y"},...

format de fichier image graphique raster utilisé pour stocker des images numériques bitmap , indépendamment du périphérique d'affichage (tel qu'une carte graphique ), notamment sur les systèmes d'exploitation Microsoft Windows et OS/2 .

Le format de fichier BMP permet de stocker des images numériques bidimensionnelles dans différentes profondeurs de couleur , et éventuellement avec compression de données , canaux alpha et profils de couleur . La spécification Windows Metafile (WMF) couvre le format de fichier BMP.

Diagramme 1 – Structure d'un fichier image bitmap

Microsoft a défini une représentation particulière des bitmaps couleur de différentes profondeurs de couleur, afin de faciliter l'échange de bitmaps entre les périphériques et les applications utilisant diverses représentations internes. Ces bitmaps sont appelés DIB (Device-Independent Bitmaps) et leur format de fichier est le format DIB ou BMP.

Selon le support Microsoft :

Un fichier DIB (Device-Independent Bitmap) est un format permettant de définir des images bitmap indépendantes du périphérique, avec différentes résolutions de couleur. Son principal intérêt réside dans sa capacité à transférer des images bitmap d'un périphérique à un autre (d'où l'appellation « indépendant du périphérique »). Contrairement à une image bitmap dépendante du périphérique, qui apparaît dans le système comme un objet bitmap (créé par une application, par exemple), le fichier DIB est un format externe. Il est généralement transporté dans des métadonnées (généralement via la fonction StretchDIBits()), des fichiers BMP et le Presse-papiers ( format de données CF_DIB ).Nom de la structureFacultatifTaille (octets)ButCommentaireEn-tête du fichier bitmaples profondeurs de couleur ≤ 8 bitsGap1Windows , ainsi que par certaines fonctions de pinceau à motifs et de ressources Windows.

ASCII . Toutes les valeurs entières sont stockées au format petit-boutiste (octet de poids faible en premier).

Décalage (octets)Taille (octets)Description
02Le champ d'en-tête utilisé pour identifier les fichiers BMP et DIB est 0x42 0x4Den hexadécimal , comme BMen ASCII. Les valeurs suivantes sont possibles :
BM
Windows 3.1x, 95, NT, ... etc.
BA
Tableau de bitmaps de structure OS/2
CI
Icône de couleur de structure OS/2
CP
OS/2 pointeur de couleur constant
CI
icône de structure OS/2
PT
Pointeur OS/2
24La taille du fichier BMP en octets
62Réservé ; la valeur réelle dépend de l’application qui crée l’image ; si elle est créée manuellement, elle peut être égale à 0.
82Réservé ; la valeur réelle dépend de l’application qui crée l’image ; si elle est créée manuellement, elle peut être égale à 0.
104Le décalage, c'est-à-dire l'adresse de départ, de l'octet où se trouvent les données de l'image bitmap (tableau de pixels).

En-tête DIB (en-tête d'informations bitmap)

Ce bloc d'octets fournit à l'application des informations détaillées sur l'image, qui serviront à son affichage à l'écran. Ce bloc correspond également à l'en-tête utilisé en interne par Windows et OS/2 et présente plusieurs variantes. Toutes contiennent un champ DWORD (32 bits) spécifiant leur taille, permettant ainsi à une application de déterminer facilement l'en-tête utilisé dans l'image. L'existence de ces différents en-têtes s'explique par les nombreuses extensions apportées au format DIB par Microsoft. Les nouveaux en-têtes étendus peuvent être utilisés avec certaines fonctions GDI à la place des anciens, offrant ainsi davantage de fonctionnalités. Le GDI prenant en charge une fonction de chargement des fichiers bitmap, les applications Windows classiques utilisent cette fonctionnalité. Par conséquent, les formats BMP pris en charge par ces applications correspondent à ceux pris en charge par la version de Windows exécutée. Consultez le tableau ci-dessous pour plus d'informations.

En-têtes bitmap Windows et OS/2
Taille (octets)Nom de l'en-têtePrise en charge du système d'exploitationCaractéristiquesÉcrit par
12Windows 2.0 ou version ultérieure OS/2 1.x
64OS/2 BITMAPCOREHEADER 2un tramage . Ajoute une compression RLE et Huffman 1D.
16Windows NT , 3.1x ou version ultérieure Étend la largeur et la hauteur des images bitmap à 4 octets. Ajoute les formats 16 et 32 ​​bits par pixel. Ajoute la compression RLE.
52pour le canal alpha .Microsoft
108Windows NT 4.0 , 95 ou version ultérieureAjoute une correction du type d'espace colorimétrique et du gamma
124Windows NT 5.0 , 98 ou version ultérieureAjoute des profils de couleur ICCGIMP
Décalage (octets)Taille (octets)OS/2 1.x BITMAPCOREHEADER Windows 95 ). Il est utilisé dans le système d'ouverture de session et de thèmes de Windows XP , ainsi que dans Microsoft Office (depuis la version 2000). Il est pris en charge par certains logiciels de retouche d'images , tels qu'Adobe Photoshop (depuis la version 7) et Adobe Flash (depuis la version MX 2004, alors connu sous le nom de Macromedia Flash). Il est également pris en charge par GIMP , Google Chrome , Microsoft PowerPoint et Microsoft Word .

Pour des raisons de compatibilité, la plupart des applications utilisent les anciens en-têtes DIB pour l'enregistrement des fichiers. OS/2 n'étant plus pris en charge après Windows 2000, le format standard sous Windows est désormais l' en-tête BITMAPINFOHEADER .

Décalage (octets)Taille (octets)Windows BITMAPINFOHEADER
ValeurIdentifié parMéthode de compressionCommentaire
0RLE 8 bits/pixelNe peut être utilisé qu'avec des images bitmap 8 bits/pixel.
2 Image JPEG pour l'impression
5 Image PNG pour l'impression
6Windows CE 5.0 avec .NET 4.0 ou version ultérieure
11le métafichier Windows CMYK
12les métadonnées Windows CMJN
13les métadonnées Windows CMJN

Un OS/2 2.x OS22XBITMAPHEADER ( BITMAPINFOHEADER2 dans la documentation IBM) contient 24 octets supplémentaires : Décalage (octets)Taille (octets)OS/2 OS22XBITMAPHEADER ( BITMAPINFOHEADER2 ) ValeurAlgorithme de tramageCommentaire0Diffusion des erreursLe paramètre de tramage 1 (décalage 64) correspond au pourcentage d'amortissement des erreurs. 100 indique l'absence d'amortissement. 0 indique que les erreurs ne sont pas diffusées.2PANDA : Algorithme de traitement pour l’acquisition de documents non codésLes paramètres de tramage 1 et 2 (décalages 64 et 68, respectivement) représentent les dimensions X et Y, en pixels, du motif de tramage utilisé.3Super-cercleLes paramètres de tramage 1 et 2 (décalages 64 et 68, respectivement) représentent les dimensions X et Y, en pixels, du motif de tramage utilisé.

Tableau des couleurs

La table de couleurs (palette) se trouve dans le fichier image BMP immédiatement après l'en-tête BMP, l'en-tête DIB et, le cas échéant, après les trois ou quatre masques de bits si l' en-tête BITMAPINFOHEADER est configuré avec l'option BI_BITFIELDS (12 octets) ou BI_ALPHABITFIELDS (16 octets). Son décalage correspond donc à la taille de l'en -tête BITMAPFILEHEADER plus la taille de l'en-tête DIB (plus 12 à 16 octets supplémentaires pour les masques de bits). Remarque : Sous Windows CE , l' en-tête BITMAPINFOHEADER peut être utilisé avec l'option BI_ALPHABITFIELDS dans le membre biCompression.ARGB32 ( 4 octets par entrée ). La table de couleurs utilisée avec l' en-tête BITMAPCOREHEADER d'OS/2 utilise le format RGB24 ( 3 octets par entrée) . Pour les DIB chargés en mémoire, la table de couleurs peut éventuellement comporter des entrées de 2 octets ; ces entrées constituent des index vers la palette actuellement réalisée au lieu de définitions de couleurs RGB explicites.

Microsoft n'interdit pas la présence d'un masque de bits alpha valide dans les en-têtes BITMAPV4HEADER et BITMAPV5HEADER pour les images couleur indexées 1 bpp, 4 bpp et 8 bpp, ce qui indique que les entrées de la table de couleurs peuvent également spécifier une composante alpha au format 8.8.8.[0-8].[0-8] via le membre RGBQUAD.rgbReserved . Cependant, certaines versions de la documentation Microsoft interdisent cette fonctionnalité en précisant que le membre RGBQUAD.rgbReserved « doit être égal à zéro ».

Comme indiqué précédemment, la table de couleurs n'est généralement pas utilisée lorsque les pixels sont au format 16 bits par pixel (16 bpp) (et supérieur) ; ces fichiers image bitmap ne contiennent normalement aucune entrée de table de couleurs. Cependant, la documentation Microsoft (disponible sur le site web MSDN depuis le 16 novembre 2010 ) précise que pour le format 16 bpp (et supérieur), la table de couleurs peut être présente afin de stocker une liste de couleurs destinées à l'optimisation sur les périphériques dont les capacités d'affichage des couleurs sont limitées. Elle précise également que, dans ce cas, aucune entrée de palette indexée n'est présente dans cette table de couleurs. Cela peut sembler contradictoire si aucune distinction n'est faite entre les entrées de palette obligatoires et la liste de couleurs facultative.

stockage pixel

Les bits représentant les pixels de l'image bitmap sont regroupés en lignes (également appelées pas ou lignes de balayage). La taille de chaque ligne est arrondie à un multiple de 4 octets (un DWORD de 32 bits ) par remplissage.

Pour les images d'une hauteur supérieure à 1, plusieurs lignes de remplissage sont stockées consécutivement, formant un tableau de pixels.

Le nombre total d'octets nécessaires pour stocker une ligne de pixels peut être calculé comme suit :

fonctions plancher et plafond .

Le nombre total d'octets nécessaires pour stocker un tableau de pixels dans une image de n bits par pixel (bpp), avec 2 n couleurs, peut être calculé en tenant compte de l'effet de l'arrondi de la taille de chaque ligne à un multiple de 4 octets, comme suit :

GDI+ autorise également 64 bits par pixel.

Des octets de remplissage (pas nécessairement nuls) doivent être ajoutés à la fin des lignes afin que leur longueur soit un multiple de quatre octets. Lors du chargement du tableau de pixels en mémoire, chaque ligne doit commencer à une adresse mémoire multiple de 4. Cette contrainte d'adresse/décalage est obligatoire uniquement pour les tableaux de pixels chargés en mémoire. Pour le stockage dans un fichier, seule la taille de chaque ligne doit être un multiple de 4 octets ; le décalage dans le fichier peut être arbitraire. Une image bitmap 24 bits de largeur 1 contient 3 octets de données par ligne (bleu, vert, rouge) et 1 octet de remplissage ; une largeur de 2 contient 6 octets de données et 2 octets de remplissage ; une largeur de 3 contient 9 octets de données et 3 octets de remplissage ; et une largeur de 4 contient 12 octets de données sans remplissage.

Compression

Format pixel

  • Le format 1 bit par pixel (1bpp) prend en charge deux couleurs distinctes (par exemple : noir et blanc). Les valeurs des pixels sont stockées dans chaque bit, le premier pixel (le plus à gauche) étant représenté par le bit de poids fort du premier octet. Chaque bit correspond à un index dans une table de deux couleurs. Un bit non positionné fait référence à la première entrée de la table, et un bit positionné à la seconde.
  • Le format 2 bits par pixel (2bpp) prend en charge 4 couleurs distinctes et stocke 4 pixels par octet, le pixel le plus à gauche étant représenté par les deux bits de poids fort ( Windows CE uniquement : ). Chaque valeur de pixel correspond à un index de 2 bits dans une table contenant jusqu’à 4 couleurs.
  • Le format 4 bits par pixel (4bpp) prend en charge 16 couleurs distinctes et stocke 2 pixels par octet, le pixel le plus à gauche se trouvant dans le quartet le plus significatif . Chaque valeur de pixel est un index de 4 bits dans une table de jusqu'à 16 couleurs.
  • Le format 8 bits par pixel (8bpp) prend en charge 256 couleurs distinctes et stocke 1 pixel par octet. Chaque octet est un index dans une table contenant jusqu'à 256 couleurs.
  • Le format 16 bits par pixel (16 bpp) prend en charge 65 536 couleurs distinctes et stocke un pixel par mot de 2 octets. Chaque mot peut définir les valeurs alpha, rouge, vert et bleu du pixel.
  • Le format 24 bits par pixel (24 bpp) prend en charge 16 777 216 couleurs distinctes et stocke une valeur de pixel par 3 octets. Chaque valeur de pixel définit les échantillons rouge, vert et bleu du pixel (8.8.8.0.0 en notation RGBAX). Plus précisément, dans l’ordre : bleu, vert et rouge (8 bits par échantillon).
  • Le format 32 bits par pixel (32 bpp) prend en charge 4 294 967 296 couleurs distinctes et stocke un pixel par DWORD de 4 octets. Chaque DWORD peut définir les valeurs alpha, rouge, verte et bleue du pixel.

Afin de lever l'ambiguïté quant à l'attribution des bits aux échantillons, les en-têtes DIB fournissent des valeurs par défaut ainsi que des champs de bits spécifiques (BITFIELDS), qui sont des masques de bits définissant l'appartenance d'un groupe particulier de bits d'un pixel à un canal spécifique . Le schéma suivant illustre ce mécanisme :

Diag. 2 – Le mécanisme BITFIELDS pour un pixel 32 bits représenté en notation de longueur d'échantillon RGBAX

Les champs d'échantillonnage définis par les masques de bits BITFIELDS doivent être contigus et non chevauchants, mais leur ordre est arbitraire. L'ordre le plus courant est : Alpha, Bleu, Vert, Rouge (du bit de poids fort au bit de poids faible). Les masques de bits rouge, vert et bleu ne sont valides que si le membre Compression de l'en-tête DIB est défini sur BI_BITFIELDS. Le masque de bits alpha est valide dès lors qu'il est présent dans l'en-tête DIB ou si le membre Compression de l'en-tête DIB est défini sur BI_ALPHABITFIELDS ( Windows CE uniquement).

Diag. 3 – Le format de pixel avec un canal alpha pour un pixel 16 bits (en notation de longueur d'échantillon RGBAX) réellement généré par Adobe Photoshop
Tous les formats de pixels possibles dans un DIB

sous-types vidéo RGB

Le mécanisme BITFIELD décrit ci-dessus permet la définition de dizaines de milliers de formats de pixels différents, cependant seuls quelques-uns d'entre eux sont utilisés en pratique, tous les formats palettisés RGB8, RGB4 et RGB1 (marqués en jaune dans le tableau ci-dessus, définis dans dshow.hles noms .MEDIASUBTYPE) :

Sous-types vidéo RVB non compressés
RGBAXsous-type RGBRGBAXsous-type ARGB
8.8.8.0.8RGB328.8.8.8.0ARGB32
10.10.10.2.0A2R10G10B10
8.8.8.0.0RGB2410.10.10.2.0A2B10G10R10
5.6.5.0.0RGB5654.4.4.4.0ARGB4444
5.5.5.0.1RGB5555.5.5.1.0ARGB1555
Champs de bits pour dix bits RGB
Champ de bitsCompenser

(hexadécimal)

MorceauxA2R10G10B10MorceauxA2B10G10R10
Rouge3600 00 F0 3FLE :3FF0000020...29FF 03 00 00LE :000003FF0...9
Vert3A00 FC 0F 00LE :000FFC0010...1900 FC 0F 00LE :000FFC0010...19
Bleu3EFF 03 00 00LE :000003FF0...900 00 F0 3FLE :3FF0000020...29
Alpha4200 00 00 C0LE :C000000030...3100 00 00 C0LE :C000000030...31
FFmpeg prenait en charge (selon sa propre terminologie) les formats de pixels BMP suivants : bgra, bgr24, rgb565le, rgb555le, rgb444le, rgb8, bgr8, rgb4_byte, bgr4_byte, gray, pal8 et monob ; c’est-à-dire que bgra était le seul format de pixel pris en charge avec transparence.

Exemple 1 d'une image bitmap 2×2 pixels, avec un encodage de 24 bits/pixel

Exemple 1

Voici un exemple d'une image bitmap 2×2 pixels, 24 bits (en-tête DIB Windows BITMAPINFOHEADER ) au format de pixel RGB24.Compenser

(hexadécimal)

Taille

(octets)

valeur hexadécimaleValeurDescriptionEn-tête BMP00242 4D"BM"Champ ID ( 42 4D)02446 00 00 0070 octets (54+16)Taille du fichier BMP (54 octets d'en-tête + 16 octets de données)06200 00InutiliséSpécifique à l'application08200 00InutiliséSpécifique à l'application0A436 00 00 0054 octets (14+40)Décalage où se trouve le tableau de pixels (données bitmap).En-tête DIB0E428 00 00 0040 octetsNombre d'octets dans l'en-tête DIB (à partir de ce point)12402 00 00 002 pixels (de gauche à droite)Largeur de l'image bitmap en pixels16402 00 00 002 pixels (de bas en haut)Hauteur de l'image bitmap en pixels. Valeur positive pour les pixels de bas en haut.1A201 001 avionNombre de plans de couleur utilisés1C218h0024 bitsNombre de bits par pixel1E400 00 00 000BI_RGB, aucune compression de matrice de pixels utilisée22410 00 00 0016 octetsTaille des données bitmap brutes (y compris le remplissage)26413 0B 00 002835 pixels/mètre horizontalLa résolution d'impression de l'image, 72 DPI × 39,3701 pouces par mètre, donne 2834,64722A413 0B 00 002835 pixels/mètre vertical2E400 00 00 000 couleursNombre de couleurs dans la palette32400 00 00 000 couleurs importantes0 signifie que toutes les couleurs sont importantesDébut du tableau de pixels (données bitmap)36300 00 FF0 0 255Rouge, Pixel (x=0, y=1)393FF FF FF255 255 255Blanc, Pixel (x=1, y=1)3C200 000 0Remplissage pour l'alignement sur 4 octets (peut être une valeur différente de zéro)3E3FF 00 00255 0 0Bleu, Pixel (x=0, y=0)41300 FF 000 255 0Vert, Pixel (x=1, y=0)44200 000 0Remplissage pour l'alignement sur 4 octets (peut être une valeur différente de zéro)
Exemple 2 d'une image bitmap de 4×2 pixels, avec un encodage de 32 bits/pixel

Exemple 2

Voici un exemple d'une image bitmap 4×2 pixels, 32 bits avec des valeurs d'opacité dans le canal alpha (en-tête DIB Windows BITMAPV4HEADER ) au format de pixel ARGB32.Compenser

(hexadécimal)

Taille

(octets)

valeur hexadécimaleValeurDescriptionEn-tête BMP00242 4D"BM"Champ ID (42h, 4Dh)0249A 00 00 00154 octets (122+32)Taille du fichier BMP06200 00InutiliséSpécifique à l'application08200 00InutiliséSpécifique à l'application0A47A 00 00 00122 octets (14+108)Décalage où se trouve le tableau de pixels (données bitmap).En-tête DIB0E46C 00 00 00108 octetsNombre d'octets dans l'en-tête DIB (à partir de ce point)12404 00 00 004 pixels (de gauche à droite)Largeur de l'image bitmap en pixels16402 00 00 002 pixels (de bas en haut)Hauteur de l'image bitmap en pixels1A201 001 avionNombre de plans de couleur utilisés1C220 0032 bitsNombre de bits par pixel1E403 00 00 003BI_BITFIELDS, aucune compression de matrice de pixels utilisée22420 00 00 0032 octetsTaille des données bitmap brutes (y compris le remplissage)26413 0B 00 002835 pixels/mètre horizontalLa résolution d'impression de l'image, 72 DPI × 39,3701 pouces par mètre, donne 2834,64722A413 0B 00 002835 pixels/mètre vertical2E400 00 00 000 couleursNombre de couleurs dans la palette32400 00 00 000 couleurs importantes0 signifie que toutes les couleurs sont importantes36400 00 FF 0000FF0000 en big-endianMasque de bits du canal rouge (valide car BI_BITFIELDS est spécifié)3A400 FF 00 000000FF00 en big-endianMasque de bits du canal vert (valide car BI_BITFIELDS est spécifié)3E4FF 00 00 00000000FF en big-endianMasque de bits du canal bleu (valide car BI_BITFIELDS est spécifié)42400 00 00 FFFF000000 en big-endianMasque de bits du canal alpha46420 6E 69 57petit-boutiste " Win "LCS_WINDOWS_COLOR_SPACE4A3600...00Points d'extrémité de l'espace colorimétrique CIEXYZTRIPLEInutilisé pour LCS " Win " ou " sRGB"6E400 00 00 000 Rouge GammaInutilisé pour LCS " Win " ou " sRGB"72400 00 00 000 Gamma vertInutilisé pour LCS " Win " ou " sRGB"76400 00 00 000 Bleu GammaInutilisé pour LCS " Win " ou " sRGB"Début du tableau de pixels (les données bitmap)7A4FF 00 00 7F255 0 0 127Bleu (Alpha : 127), Pixel (x=0, y=1)7E400 FF 00 7F0 255 0 127Vert (Alpha : 127), Pixel (x=1, y=1)82400 00 FF 7F0 0 255 127Rouge (Alpha : 127), Pixel (x=2, y=1)864FF FF FF 7F255 255 255 127Blanc (Alpha : 127), Pixel (x=3, y=1)8A4FF 00 00 FF255 0 0 255Bleu (Alpha : 255), Pixel (x=0, y=0)8E400 FF 00 FF0 255 0 255Vert (Alpha : 255), Pixel (x=1, y=0)92400 00 FF FF0 0 255 255Rouge (Alpha : 255), Pixel (x=2, y=0)964FF FF FF FF255 255 255 255Blanc (Alpha : 255), Pixel (x=3, y=0)

Notez que les données bitmap commencent par le coin inférieur gauche de l'image.

Utilisation du format BMP

La simplicité du format BMP, sa large diffusion sous Windows et ailleurs, ainsi que sa documentation relativement complète et son caractère ouvert , en font un format très courant, lisible et écrivable par les logiciels de traitement d'images de nombreux systèmes d'exploitation. Les fichiers ICO et CUR contiennent des images bitmap commençant par un en-tête BITMAPINFOHEADER.

De nombreuses interfaces utilisateur graphiques plus anciennes utilisaient des bitmaps dans leurs sous-systèmes graphiques intégrés ; par exemple, le sous-système GDI des plateformes Microsoft Windows et OS/2 , où le format spécifique utilisé est le format de fichier bitmap Windows et OS/2 , généralement nommé avec l' extension de fichier .BMP.

Bien que la plupart des fichiers BMP aient une taille relativement importante en raison de l'absence de compression (ou d' un encodage RLT généralement faible sur les images palettisées), nombre d'entre eux peuvent être considérablement compressés grâce à des algorithmes de compression sans perte comme ZIP , car ils contiennent des données redondantes. Certains formats, tels que RAR , intègrent même des routines spécifiquement conçues pour une compression efficace de ces données.

Formats associés

système X Window utilise un format similaire , XBM, pour les images en noir et blanc, et XPM ( pixel map ) pour les images couleur. Il existe également divers formats « raw », qui enregistrent les données brutes sans autre information. Les formats Portable Pixmap (PPM) et Truevision TGA existent aussi, mais sont moins fréquemment utilisés , ou seulement à des fins spécifiques ; par exemple, le format TGA peut contenir des informations de transparence.

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index