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:
- 0x4142 ('BA') per le bitmap multiple;
- 0x4D42 ('BM') per le bitmap singole;
- 0x4349 ('IC') per le icone 1 bit per pixel;
- 0x4540 ('PT') per i puntatori del mouse 1 bit per pixel;
- 0x4943 ('CI') per le icone a colori;
- 0xc043 ('CP') per i puntatori a colori.
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.