PROGRAMMIAMO
File - Formato bmp
Il formato BMP

Il formato BMP è uno dei formati più semplici (sviluppato congiuntamente da Microsoft e IBM) ed è particolarmente diffuso sulle piattaforme Windows. I file BMP hanno di solito estensione .bmp e registrano l'immagine come una matrice di pixel. Ogni pixel viene rappresentato con un certo numero di bit, a seconda del numero di colori dell'immagine.

A differenza di altri formati più evoluti, in un file bmp le immagini possono essere memorizzate in forma non compressa (anche se il formato bmp supporta la compressione lossless Run-length encoding). In un file bmp non compresso il peso in bit dell'immagine può essere determinato moltiplicando le sue dimensioni in pixel per il numero di bit attribuiti ad ogni pixel. Per esempio un'immagine bmp 300 x 400 con 8 bit per pixel di profondità colore occuperà 120.000 Byte.

In realtà le dimensioni dei file bmp sono leggermente maggiori del peso della semplice immagine in quanto essi contengono anche alcune informazioni aggiuntive, come mostrato nella figura seguente:

La struttura nel dettaglio è spiegata qui sotto:

File Header (14 bytes) 

Quest'area contiene una struttura dati chiamata BITMAPFILEHEADER con alcune informazioni sul file.
Firma (2 bytes) Caratteri 'BM'
FileSize (4 bytes) Dimensioni del file in byte
reserved (4 bytes) Attualmente non usato (=0)
DataOffset (4 bytes) Distanza in byte (detta offset) della parte dati (Pixel Data)

Info Header (40 bytes) 

Quest'area contiene una struttura dati chiamata BITMAPINFOHEADER contenente informazioni sull'immagine
Size (4 bytes) Dimensioni di InfoHeader (40)
Width (4 bytes) Larghezza in pixel dell'immagine
Height (4 bytes) Altezza in pixel dell'immagine
Planes (2 bytes) Numero di piani (=1)
BitCount (2 bytes) Bits per Pixel
1 = monocromatica NumColors = 1
4 = 4bit
NumColors
 = 16
8 = 8bit
NumColors
 = 256
16 = 16bit
NumColors
 = 65536
24 = 24bit
NumColors
 = 16M
Compression (4 bytes) Tipo di compressione
0 = BI_RGB no compression 
1 = BI_RLE8 8bit RLE encoding 
2 = BI_RLE4 4bit RLE encoding
ImageSize (4 bytes) (compressed) Size of Image 
It is valid to set this =0 if Compression = 0
XpixelsPerM (4 bytes) Risoluzione orizzontale: Pixels/meter
YpixelsPerM (4 bytes) Risoluzione verticale: Pixels/meter
ColorsUsed (4 bytes) Numero di colori effettivamente usati
ColorsImportant (4 bytes) Numero di colori importanti
 0 = all
Colour Table Presente solo se BitsPerPixel <= 8 
Number of bytes = 4 * NumColors 
I 4 bit di ogni colore rappresentano: 
            Rosso (1 byte) 
            Verde (1 byte) 
            Blu (1 byte) 
            riservato/non usato (1 byte)
Pixel Data Quest'area del file contiene la mappa dei pixel dell'immagine

 

La palette

L'area Colour Table (detta anche tavolozza o palette) associa un numero (indice) ad ogni colore che può essere assegnato ad un pixel. Nella tavolozza ogni colore è rappresentato da una struttura di 4 byte, uno ciascuno per i componenti rosso, verde e blu, più un byte non utilizzato. Nel caso di immagini con 16, 24 o 32 bit per pixel ,questa tabella di colori non è necessaria perché il colore dei pixel non è indicizzato, bensì codificato direttamente nelle sue componenti.

Per esempio, considerando un'immagine bmp a 4 bit per pixel, questa può contenere 16 colori. Tali colori però non sono fissi e predeterminati, ma possono variare da un'immagine all'altra. Lo scopo della palette è appunto quella di contenere tutti i colori che l'immagine utilizza. Per essere ancora più concreti, in una certa bmp il codice 1 potrebbe rappresentare per esempio una certa sfumatura di giallo, mentre in un'altra (dove magari tale sfumatura è assente) lo stesso numero è usato per rappresentare un altro colore (es. rosa).

Si consideri per esempio la figura seguente:

Palette immagine

La palette è stata rappresentata con una tavolozza di 8 colori numerati da 0 (bianco) a 7 (rosso). I numeri assegnati ai colori sono arbitrari. Sulla destra è rappresentato un disegno che utilizza tali 8 colori (lo sfondo è in bianco, colore numero 0).

La palette consente di risparmiare spazio nell'immagine, poiché il colore di ogni singolo pixel viene rappresentato con un numero, detto indice nella palette. Per esempio con 16 colori, basteranno i numeri da 0 (0000) a 15 (1111) cioè solo 4 bit per ogni colore. Invece la sfumatura di colore che corrisponde a ogni indice è scritta nella palette (sotto forma di codice RGB a 24 bit).

La mappa dei pixel

L'area Pixel Data (detta anche mappa dei pixel) costituisce il corpo vero e proprio della bitmap, dove ad ogni pixel si fa corrispondere un colore sotto forma di indice nella tavolozza (Colour Table), oppure direttamente nelle sue componenti cromatiche RGB (per le immagini bmp con più di 16 bit di profondità colore).

I pixel nella mappa dei pixel sono mappati in un ordine un po' particolare: da sinistra a destra e dal bassi verso l'alto. Questo significa che il primo valore nella Pixel Data rappresenta il pixel in basso a sinistra nell'immagine e l'ultimo valore è il pixel in alto a destra. La figura seguente mostra la mappatura dei pixel in una immagine bmp 8 x 8 (sopra è visualizzato il contenuto esadecimale del file, in rosso la mappa dei pixel; nella parte sottostante si trova l'immagine corrispondente).

Mappa dei pixel bmp

 

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it