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 structure
Facultatif
Taille (octets)
But
Commentaire
En-tête du fichier bitmap
les profondeurs de couleur ≤ 8 bits
Gap1
Windows , 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
0
2
Le 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
2
4
La taille du fichier BMP en octets
6
2
Ré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.
8
2
Ré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.
10
4
Le 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.
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
Valeur
Identifié par
Méthode de compression
Commentaire
0
RLE 8 bits/pixel
Ne peut être utilisé qu'avec des images bitmap 8 bits/pixel.
2
Image JPEG pour l'impression
5
Image PNG pour l'impression
6
Windows CE 5.0 avec .NET 4.0 ou version ultérieure
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 )
Valeur
Algorithme de tramage
Commentaire
0
Diffusion des erreurs
Le 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.
2
PANDA : Algorithme de traitement pour l’acquisition de documents non codés
Les 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é.
3
Super-cercle
Les 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.
OS/2 BITMAPCOREHEADER 2 Les images 24bpp peuvent être compressées avec l'algorithme RLE 24 bits.
Les images 16bpp et 32bpp sont toujours stockées non compressées.
Notez que les images de toutes les profondeurs de couleur peuvent être stockées sans compression si vous le souhaitez.
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
RGBAX
sous-type RGB
RGBAX
sous-type ARGB
8.8.8.0.8
RGB32
8.8.8.8.0
ARGB32
10.10.10.2.0
A2R10G10B10
8.8.8.0.0
RGB24
10.10.10.2.0
A2B10G10R10
5.6.5.0.0
RGB565
4.4.4.4.0
ARGB4444
5.5.5.0.1
RGB555
5.5.5.1.0
ARGB1555
Champs de bits pour dix bits RGB
Champ de bits
Compenser
(hexadécimal)
MorceauxA2R10G10B10
MorceauxA2B10G10R10
Rouge
36
00 00 F0 3F
LE :3FF00000
20...29
FF 03 00 00
LE :000003FF
0...9
Vert
3A
00 FC 0F 00
LE :000FFC00
10...19
00 FC 0F 00
LE :000FFC00
10...19
Bleu
3E
FF 03 00 00
LE :000003FF
0...9
00 00 F0 3F
LE :3FF00000
20...29
Alpha
42
00 00 00 C0
LE :C0000000
30...31
00 00 00 C0
LE :C0000000
30...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écimale
Valeur
Description
En-tête BMP
00
2
42 4D
"BM"
Champ ID ( 42 4D)
02
4
46 00 00 00
70 octets (54+16)
Taille du fichier BMP (54 octets d'en-tête + 16 octets de données)
06
2
00 00
Inutilisé
Spécifique à l'application
08
2
00 00
Inutilisé
Spécifique à l'application
0A
4
36 00 00 00
54 octets (14+40)
Décalage où se trouve le tableau de pixels (données bitmap).
En-tête DIB
0E
4
28 00 00 00
40 octets
Nombre d'octets dans l'en-tête DIB (à partir de ce point)
12
4
02 00 00 00
2 pixels (de gauche à droite)
Largeur de l'image bitmap en pixels
16
4
02 00 00 00
2 pixels (de bas en haut)
Hauteur de l'image bitmap en pixels. Valeur positive pour les pixels de bas en haut.
1A
2
01 00
1 avion
Nombre de plans de couleur utilisés
1C
2
18h00
24 bits
Nombre de bits par pixel
1E
4
00 00 00 00
0
BI_RGB, aucune compression de matrice de pixels utilisée
22
4
10 00 00 00
16 octets
Taille des données bitmap brutes (y compris le remplissage)
26
4
13 0B 00 00
2835 pixels/mètre horizontal
La résolution d'impression de l'image, 72 DPI × 39,3701 pouces par mètre, donne 2834,6472
2A
4
13 0B 00 00
2835 pixels/mètre vertical
2E
4
00 00 00 00
0 couleurs
Nombre de couleurs dans la palette
32
4
00 00 00 00
0 couleurs importantes
0 signifie que toutes les couleurs sont importantes
Début du tableau de pixels (données bitmap)
36
3
00 00 FF
0 0 255
Rouge, Pixel (x=0, y=1)
39
3
FF FF FF
255 255 255
Blanc, Pixel (x=1, y=1)
3C
2
00 00
0 0
Remplissage pour l'alignement sur 4 octets (peut être une valeur différente de zéro)
3E
3
FF 00 00
255 0 0
Bleu, Pixel (x=0, y=0)
41
3
00 FF 00
0 255 0
Vert, Pixel (x=1, y=0)
44
2
00 00
0 0
Remplissage 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écimale
Valeur
Description
En-tête BMP
00
2
42 4D
"BM"
Champ ID (42h, 4Dh)
02
4
9A 00 00 00
154 octets (122+32)
Taille du fichier BMP
06
2
00 00
Inutilisé
Spécifique à l'application
08
2
00 00
Inutilisé
Spécifique à l'application
0A
4
7A 00 00 00
122 octets (14+108)
Décalage où se trouve le tableau de pixels (données bitmap).
En-tête DIB
0E
4
6C 00 00 00
108 octets
Nombre d'octets dans l'en-tête DIB (à partir de ce point)
12
4
04 00 00 00
4 pixels (de gauche à droite)
Largeur de l'image bitmap en pixels
16
4
02 00 00 00
2 pixels (de bas en haut)
Hauteur de l'image bitmap en pixels
1A
2
01 00
1 avion
Nombre de plans de couleur utilisés
1C
2
20 00
32 bits
Nombre de bits par pixel
1E
4
03 00 00 00
3
BI_BITFIELDS, aucune compression de matrice de pixels utilisée
22
4
20 00 00 00
32 octets
Taille des données bitmap brutes (y compris le remplissage)
26
4
13 0B 00 00
2835 pixels/mètre horizontal
La résolution d'impression de l'image, 72 DPI × 39,3701 pouces par mètre, donne 2834,6472
2A
4
13 0B 00 00
2835 pixels/mètre vertical
2E
4
00 00 00 00
0 couleurs
Nombre de couleurs dans la palette
32
4
00 00 00 00
0 couleurs importantes
0 signifie que toutes les couleurs sont importantes
36
4
00 00 FF 00
00FF0000 en big-endian
Masque de bits du canal rouge (valide car BI_BITFIELDS est spécifié)
3A
4
00 FF 00 00
0000FF00 en big-endian
Masque de bits du canal vert (valide car BI_BITFIELDS est spécifié)
3E
4
FF 00 00 00
000000FF en big-endian
Masque de bits du canal bleu (valide car BI_BITFIELDS est spécifié)
42
4
00 00 00 FF
FF000000 en big-endian
Masque de bits du canal alpha
46
4
20 6E 69 57
petit-boutiste " Win "
LCS_WINDOWS_COLOR_SPACE
4A
36
00...00
Points d'extrémité de l'espace colorimétrique CIEXYZTRIPLE
Inutilisé pour LCS " Win " ou " sRGB"
6E
4
00 00 00 00
0 Rouge Gamma
Inutilisé pour LCS " Win " ou " sRGB"
72
4
00 00 00 00
0 Gamma vert
Inutilisé pour LCS " Win " ou " sRGB"
76
4
00 00 00 00
0 Bleu Gamma
Inutilisé pour LCS " Win " ou " sRGB"
Début du tableau de pixels (les données bitmap)
7A
4
FF 00 00 7F
255 0 0 127
Bleu (Alpha : 127), Pixel (x=0, y=1)
7E
4
00 FF 00 7F
0 255 0 127
Vert (Alpha : 127), Pixel (x=1, y=1)
82
4
00 00 FF 7F
0 0 255 127
Rouge (Alpha : 127), Pixel (x=2, y=1)
86
4
FF FF FF 7F
255 255 255 127
Blanc (Alpha : 127), Pixel (x=3, y=1)
8A
4
FF 00 00 FF
255 0 0 255
Bleu (Alpha : 255), Pixel (x=0, y=0)
8E
4
00 FF 00 FF
0 255 0 255
Vert (Alpha : 255), Pixel (x=1, y=0)
92
4
00 00 FF FF
0 0 255 255
Rouge (Alpha : 255), Pixel (x=2, y=0)
96
4
FF FF FF FF
255 255 255 255
Blanc (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.