il formato Bitmap

Il formato BMP è quello privilegiato dai sistemi operativi OS/2 e Windows. Nell'ambito dei due sistemi vi sono alcune differenze che, come si vedrà in seguito, sono facilmente aggirabili. Un file bitmap può contenere immagini a 1, 2,4, 8, 24 bit per pixel, in formato compresso o non compresso. Nel primo caso possono essere utilizzati più schemi di compressione, basati principalmente su algoritmi run-length encoding (RLE).

Struttura di un file Bitmap


Nella figura viene mostrata la struttura di un file BMP.
Si nota un header della dimensione di 14 byte (detto File Info Header), seguito da una seconda intestazione contenente le informazioni sull'immagine (detta Bitmap Info Header). La dimensione di questo secondo blocco di dati è specificata nel primo long (4 byte) della struttura e corrisponde a 64 byte nel caso dei bitmap di OS/2 e a 40 byte per il formato DIB (Device-Independent Bitmap) di Windows.
Alle strutture di descrizione seguono i blocchi di dati che rappresentano l'immagine. Nel caso di immagini con palette (per esempio a 4 e 8 bit per pixel) il primo blocco che segue gli header è la palette dei colori, vale a dire un array di valori RGB. I pixel dell'immagine faranno riferimento agli indici di questa tabella per indicare il loro colore. Se l'immagine è a 24-bit la palette dei colori non esiste e i dati che seguono indicano direttamente il colore dei singoli pixel attraverso la usuale notazione RGB.
I dati dell'immagine sono memorizzati riga per riga, a partire dall'ultima fino alla prima (cioè i primi dati che si incontrano sono quelli relativi all'ultima riga della figura). I dati di ogni linea sono allineati a multipli di 4 byte.
I primi due byte di un file BMP ne indicano il formato. Possono assumere i seguenti valori:

In ambiente Windows i DIB corrispondono alla variante BM, mentre le altre varianti non hanno significato.
In ambiente OS/2, invece, i file BA possono contenere più bitmap, generalmente la prima device-independent e le altre specifiche per determinati device.
Il sistema operativo IBM utilizza lo stesso formato di file anche per le icone e per i puntatori del mouse.


File Info Header e Bitmap Info Header in dettaglio

Indichiamo con:
DWORD doubleword (32 bits).
LONG 32-bit signed value.
WORD unsigned word (16 bits).

BYTE (8 bit)
FILE INFO HEADER
    WORD	Type 		Definisce il tipo di file
    DWORD 	Size 		Dimensione in byte del file
    WORD 	Reserved1	Riservato 
    WORD 	Reserved2	Riservato 
    DWORD 	OffBits; 	offset in byte dell'immagine (Color-Index array) dall'inizio


BITMAP INFO HEADER
    DWORD	Size 		Dimensione struttura
    LONG	Width 		Larghezza immagine
    LONG	Height 		Altezza immagine
    WORD	Planes		Piani
    WORD	BitCount; 	N. bit per pixel
    DWORD	Compression; 	Compressione (0 non compresso)
    DWORD	SizeImage; 	Dimensione immagine (se non compresso 0)
    LONG	XPelsPerMeter; 	Risoluzione orizz. Pixel per metro
    LONG	YPelsPerMeter; 	Risoluzione vert. Pixel per metro
    DWORD	ClrUsed; 	N. colori
    DWORD	ClrImportant; 	


Palette (RGBQUAD)
 
    BYTE	Blue; 		Intesita' del blu
    BYTE	Green; 		Intensita' del verde
    BYTE	Red; 		Intensita' del rosso
    BYTE	Reserved; 	Riservato

Infine il Color-Index array descrive l'immagine.
Questa e'rappresentata da un insieme di punti (pixel), ogni punto codificato in un byte (valorecompreso tra 0 e 255). Il valore numerico associato ad ogni pixel e' utilizzato come indice del vettore della tavola dei colori RGB (Palette) che fornisce il colore rappresentato sul monitor.