sommairePrincipe de codage

On trouve successivement dans le fichier :

  1. des informations générales (BitmapFileHeader et BitmapInfoHeader)
  2. une table de couleurs (= palette) (sauf si le bitmap est en 16 millions de couleurs)
  3. la liste des valeurs associées à chaque pixel en allant de la gauche vers la droite de l'image et du bas vers le haut (Attention, piège!).

La palette contient la liste des couleurs à utiliser pour dessiner le bitmap, chaque couleur étant codée sur 32 bits (1 octet pour le Rouge, 1 pour le Vert, 1 pour le Bleu, et 1 à 0 pour compléter sur 4 octets)
Une palette est donc définie en 16 millions de couleurs (même si le périphérique ne sait pas traiter autant de couleurs).

Cette palette est inexistante pour les bitmaps 16 millions de couleurs puisque chaque pixel est représenté sur 3 octets avec les vraies valeurs de R,V et B.
Pour les autres bitmaps, on représente chaque pixel d'une façon indirecte par un nombre (sur 1,4 ou 8 bits) qui est un index par rapport à la palette.

sommaireDétails

(les offsets et valeurs numériques sont exprimés en hexadécimal)

Structures Type Nom Microsoft Offset Commentaires
BitmapFileHeader UINT bfType 0000 type du fichier (= "BM" ou,en hexadécimal, 424D)
DWORD bfSize 0002 taille du fichier en octets
UINT bfReserved1 0006 réservé (doit être 0000)
UINT bfReserved2 0008 réservé (doit être 0000)
DWORD bfOffBits 000A offset des données depuis la structure
BitmapInfoHeader DWORD biSize 000E nombre d'octets de la structure
LONG biWidth 0012 largeur du bitmap en pixels.
LONG biHeight 0016 hauteur du bitmap en pixels
WORD biPlanes 001A nombre de plans (doit être 0001)
WORD biBitCount 001C

nombre de
bits par pixel

0001 (1) bitmap monochrome.
palette à 2 entrées
Un pixel est codé sur 1 bit (0 ou 1)
0004 (4) bitmap en 16 couleurs.
palette à 16 entrées
Un pixel est codé sur 4 bits (0 à F)
0008 (8) bitmap en 256 couleurs.
palette à 256 entrées
Un pixel est codé sur 8 bits (00 à FF)
0018 (24) bitmap en 16 777 216 couleurs
DWORD biCompression 001E

type de
compression

00000000 non compressé (standard)
00000002 compression RLE 4 bits par pixel
00000001 compression RLE 8 bits par pixel
DWORD biSizeImage 0022

taille de
l'image en octets

taille réelle si bitmap compressé
00000000 si bitmap non compressé
LONG biXPelsPerMeter 0026 résolution horizontale en pixels par mètre
LONG biYPelsPerMeter 002A résolution verticale en pixels par mètre
DWORD biClrUsed 002E

nombre de couleurs dans la palette du bitmap

00000000 le bitmap utilise le maximum de
couleurs correspondant à la valeur de biBitCount
xxxxxxxx nombre de couleurs accessibles
DWORD biClrImportant 0032 nombre de couleurs considérées comme importantes pour afficher le bitmap.
Si =0, toutes les couleurs sont importantes.
TRGBQUAD variable   0036

Palette, composée
d'une succession de RGBQUAD :

BYTE rgbBlue
BYTE rgbGreen
BYTE rgbRed
BYTE rgbReserved

répétés n fois avec :

biClrUsed<>0 n=biClrUsed
biClrUsed=0 biBitCount=1 n=2
biBitCount=4 n=16
biBitCount=8 n=256
biBitCount=24 n=0
BITS variable   0036+n*4 Bitmap proprement dit