Il formato BMP
Il formato BMP è uno dei formati più semplici sviluppato congiuntamente da Microsoft e IBM, motivo per cui è particolarmente diffuso sulle piattaforme Windows e OS/2. Un file BMP è un file bitmap, cioè un file di immagine grafica che immagazzina i pixel sotto forma di tabella di punti e che gestisce i colori sia in true color sia attraverso una paletta indicizzata. Il formato BMP è stato studiato in maniera tale da ottenere un bitmap indipendente dalla periferica di visualizzazione (DIB, Device
independent bitmap).
La struttura di un file bitmap è la seguente :
Titolo del file
Il titolo del file fornice delle informazioni sul tipo di file (Bitmap), la sua dimensione e indica dove cominciano le informazioni riguardanti l'immagine propriamente detta.
Il titolo è composto da quattro campi :
- La firma (su due byte), indica che si tratta di un file BMP attraverso i suoi due caratteri.
- BM, 424D in esadecimale, indica che si tratta di un Bitmap Windows.
- BA indica che si tratta di un Bitmap OS/2.
- CI indica che si tratta di un'icona di colore OS/2
- CP indica che si tratta di un puntatore di colore OS/2
- IC indica che si tratta di un'icona OS/2.
- PT indica che si tratta di un puntatore OS/2.
- La dimensione totale del file in byte (codificato a 4 byte)
- Un campo riservato (su 4 byte)
- L'offset dell'immagine (su 4 Byte) , cioè l'indirizzo relativo all'inizio delle informazioni riguardanti l'immagine rispetto all'inizio del file
Titolo dell'immagine
Il titolo dell'immagine fornisce delle informazioni sull'immagine, soprattutto le sue dimensioni e i suoi colori.
Il titolo dell'immagine è composto da quattro campi :
La dimensione del titolo dell'immagine in byte (codificata a 4 byte). I valori esadecimali seguenti sono possibili secondo il tipo di formato BMP :-
28 per Windows 3.1x, 95, NT,…- 0C per OS/2 1.x
- F0 per OS/2 2.x
-
La larghezza dell'immagine (a 4 byte), cioè il numero di pixel orizzontalmente (in inglese - width)L'altezza dell'immagine (a 4 byte), cioè il numero di pixel verticalmente (in inglese
- height)Il numero di piani (a 2 byte). Questo valore vale sempre 1
- La profondità di codifica del colore (su 2 byte), cioè il numero di bit usati per codificare il colore. Questo valore può essere uguale a 1, 4, 8, 16, 24 o 32
- Il metodo di compressione (a 4 byte). Questo valore vale 0 quando l'immagine non è compressa, oppure 1, 2 o 3 secondo il tipo di compressione usata :
-
1 per codifica RLE di 8 bit per pixel- 2 per codifica RLE da 4 bit per pixel
- 3 per codifica bitfields, significa che il colore è codificato con una tripla maschera rappresentata dalla paletta
-
La dimensione totale dell'immagine in byte (a 4 byte). - La risoluzione orizzontale (a 4 byte), cioè il numero di pixel per metro orizzontale
- La risoluzione verticale (su 4 byte), cioè il numero di pixel per metro verticale
- Il numero di colori della paletta (su 4 byte)
- Il numero di colori importanti della paletta (su 4 byte). Questo campo può essere uguale a 0 quando ogni colore ha la sua importanza.
-
Paletta dell'immagine
La paletta è opzionale. Quando si definisce una paletta, essa contiene successivamente 4 byte per ognuna delle sue entrate rappresentanti :
La componente blu (su un byte)- La componente verde (su un byte)
- La componente rossa (su un byte)
- Un campo riservato (su un byte)
-
Codifica dell'immagine
La codifica dell'immagine si effettua scrivendo successivamente i bits corrispondenti ad ogni pixel, linea per linea e cominciando dal pixel in basso a sinistra.
Le immagini a 2 colori usano 1 bit per pixel, il che significa che un byte permette di codificare 8 pixel- Le immagini a 16 colori usano 4 bit per pixel, il che significa che un byte permette di codificare 2 pixel
- Le immagini a 256 colori usano 8 bit per pixel, il che significa che un byte codifica ogni pixel
- Le immagini in true color usano 24 bit per pixel, il che significa che bisogna avere 3 byte per codificare ogni pixel, assicurandosi di rispettare l'ordine di alternanza blu, verde e rosso.
- Ogni linea dell'immagine deve avere un numero totale di byte che sia un multiplo di 4; se non è questo il caso, la linea deve essere completata con degli 0 in modo da rispettare questo criterio.