. • Le format Bitmap • .

La photo de MOAA!

Cette page n'a pas pour but de caractériser entièrement toutes les versions existantes du format BMP dont la plus part sont de toute façon jamais utilisés mais de comprendre comment il est constitué dans la majorité des cas.

Le BMP est un format d'image sans pertes, pour Windows uniquement. Sans compression, chaque pixel doit être codé à part. C'est pour ça qu'il est l'un des plus simples à coder. En contre partie il prend beaucoup de place. (2.86Mo pour une image de 1000*1000 en 24bit!) Mais dans des versions du BMP plus récentes il peut aussi être compressé avec la compression RLE. Mais celle-ci est très rarement utilisée.
(Une compression que je me suis imaginé/inventé avant de découvrir presque la même sur internet, zen ai marre !, donc je met pas ici NA!)

Les couleurs peuvent être codées sur un nombre de bits différent :

Nb. de bits/pixel Equivalent en octets Nb. de couleurs
1 1/8 2 Avec palette
4 1/2 16 Avec palette
8 1 256 Avec palette
16 2 65536
24 3 16777216
Icone du BMP sous Windows XP

Le fichier est composé de :
    - L'entête du fichier
    - L'entête de l'image
    - Une éventuelle une palette
    - Les données de l'image


Entête du fichier :

o.   Valeurs en Hexa Utilité            
2 42 4D Correspond à 'B' et 'M' (ASCI) pour indiquer le fichier BMP
(d'autres valeurs sont possibles : BA, CI, CP, IC, PT)
4 XX XX XX XX Taille de tout le fichier en octets.
2 XX XX Signature du programme qui à produit le fichier. Sinon = 0
2 XX XX Signature du programme qui à produit le fichier. Sinon = 0
4 36 04 00 00 Adresse de départ de l'image (du 1er pixel)

Entête de l'image :

o.   Valeurs en Hexa Utilité            
4 28 00 00 00 Taille de l'entête de l'image en octets : 40o
4 XX XX XX XX Largeur de l'image en pixels
4 XX XX XX XX Hauteur de l'image en pixels
2 01 00 Nb. de plans utilisés (1 = une image non animée)
2 XX XX Nb. de bits par pixel (1, 4, 8, 16 ou 24)
4 XX XX XX XX Méthode de compression (0 = sans compression)
4 XX XX XX XX Taille de l'image en octets = H*L*[Nb. d'octets par pixel]
+ H*[Nb. de 0 à rajouter par ligne])
4 XX XX XX XX Résolution horizontale en en pixels par mètre
4 XX XX XX XX Résolution verticale en en pixels par mètre
4 XX XX XX XX Nb. de couleurs dans la palette (à 0 si mode 16 ou 24bits)
4 XX XX XX XX Nb. de couleurs importantes (toujours ignoré = 0)


Attention : Les octets constituant les valeurs sont rangés de gauche à droite en commençant par l'octet de poids faible, et sont arrangés à gauche. Exemple : 7000 qui fait 1B58 en Hexadécimale serra écrit : 58 1B 00 00 sur 4 octets.


La palette :
C'est la liste de tous les couleurs que les pixels de l'image peuvent prendre. Elle est nécessaire dans le fichier pour les modes 1, 4 et 8 bits. Il faut donc que le nombre de couleurs codé dans la palette correspond avec le mode de couleurs. Chaque couleur est codée sur 3 octets de la même manière que pour le mode 24 bits (Voir plus bas). Mais chaque couleur (sur 3 octets) se termine par un 4ème octet égale à 00. L'indice de chaque couleur dépend tout simplement de l'ordre dans lequel sont écrits les couleurs dans la palette. Celui-ci est utilisé pour représenter chaque couleur dans l'image.


Les données de l'image :
Les données de l'image sont codés et arrangés de manière différente en fonction du mode de bits/pixels.
Le fichier se lit d'en bas à gauche jusqu'en haut à droite. Les octets sont rangés à la fin du fichier tous à la queuleuleu et au km.
Chaque ligne horizontale de pixels doit être codée par un nombre d'octets multiple de 4. Si c'est pas le cas des 0s sont rajoutés à la fin de chaque ligne.

Mode 24 bits (3octets) :
Chaque pixel est codé par un niveau de :
Bleu (1 octet) , Vert (1 octet) et Rouge (1 octet)
Exemple1 : FF 00 00 = 255 Bleu, 0 Vert, 0 Rouge = BLEU
Exemple2 : 00 FF FF = 0 Bleu, 255 Vert, 255 Rouge = JAUNE


Mode 16 bits :
Ce mode permet de coder en plus de 4096 couleurs RVB, 16 niveaux de transparence (canal alpha).
Chaque pixel est codé par un niveau de :
Bleu (4bits), Vert (4bits), Rouge (4bits) et Transparence (4bits)
Exemple : 4D58 = 4 Bleu, 13 Vert, 5 Rouge et 8 Transparence = Un vert claire légèrement grisé à moitié transparent !


Mode 8 bits :
C'est le bon vieux mode 256 couleurs ! :3 (Utilisé par exemple par plein de vieux jeux vidéos et aussi par des vieux systèmes d'exploitations comme Windows 95 :3)
Chaque pixel est codé par une valeur allant de 0 à 255, qui elle correspond à une couleur dans la palette.
Exemple : 12 04 2D correspond à 3 pixels portant la 12ème, 4ème et 45ème couleur le la palette.


Mode 4 bits :
C'est le mode 16 couleurs. (Utilisé par exemple sous Windows 3.11 :3) Chaque pixel est codé par 4 bits à l'intérieur d'un octet. Avec un seul octet on peut donc coder 2 pixels. Chaque pixel est codé par une valeur allant de 0 à 15, qui elle correspond à une couleur dans la palette.
Exemple : 2D correspond à 2 pixels portant la 2ème et 13ème couleur le la palette.


Mode 1 bit :
C'est le mode Monochrome. Donc on n'a que 2 couleurs différentes dans l'image.
Chaque pixel est codé par un 0 ou un 1 à l'intérieur d'un octet. Avec un seul octet on peut donc coder 8 pixels. Un 0 tout comme un 1 correspondent à une couleur dans la palette de couleur (2 couleurs).


Voici un exemple :

Image exemple

Image BMP 4x4, 24 bits


Code hexadécimale de l'image

Code hexadécimale complet de l'image


Image exemple en binaire

Décomposition en code binaire
Le noir représente un "0" le blanc un "1"




Précédent

Ajouter un commentaire