Struttura del formato BMP

Da Gambas-it.org - Wikipedia.

Il formato BMP (Bitmap) è un formato di immagini ottenute con la tecnica della Grafica a griglia, ed i relativi file posseggono generalmente l'estensione .bmp .

Del formato BMP esistono tre versioni: la 3, la 4 e la 5.


Struttura del file BMP

Il file di formato .bmp è sostanzialmente composto da tre blocchi:

  • quello iniziale (bitmapfileheader), formato da 14 byte, che contiene informazioni sul file medesimo;
  • il bitmapinfoheader, formato da 40 byte, che contiene informazioni generiche sull'immagine;
  • quello finale che contiene i dati veri e propri relativi ai colori di ciascun pixel. Con le versioni 4 e 5 tale blocco finale è stato ampliato con l'aggiunta di nuovi campi in coda.

Per la struttura in dettaglio rinviamo alla relativa esposizione presente in Wikipedia.

Analisi del blocco dei pixel che compongono l'imagine

Prenderemo in considerazione un file .bmp a colori con risoluzione a 24 bit (quindi il colore di ogni pixel viene definito da 3 byte. Il che significa che il pixel stesso è definito da 3 byte). Come abbiamo già visto, i dati specifici (3 byte) riguardanti il colore di ciascun pixel, costituente l'immagine, sono custoditi nel terzo blocco del file.
Ciascun gruppo di 3 byte definisce l'altezza (Height) dell'immagine, o - se vogliamo dire - una colonna di pixel. L'insieme dei gruppi di 3 byte, che definiscono i colori dei pixel, formano la dimensione della lunghezza (Width) in pixel dell'immagine, o - se vogliamo dire - una riga.
Il numero dei dati relativi ai colori dei pixel di ciascuna riga di pixel deve essere sempre uguale ad un numero multiplo di 4. In caso contrario si aggiungono alla riga dei byte dei colori tanti byte zero quanti ne mancano per raggiungere il numero più prossimo multiplo di 4.
Prendiamo come semplice esempio un file di immagine in formato BMP composto da 3 pixel in lunghezza (tre colonne) e da 3 pixel in altezza (tre righe). Tutti i byte hanno valore FF, ad indicare che l'immagine è completamente di colore bianco. Ogni riga che compone il reticolo dell'immagine, dunque, sarà inizialmente formata da 9 byte (3 byte * 3 pixel). Ma 9 non è un multiplo di 4, e pertanto si dovranno aggiungere tanti byte zero quanti sono necessari per raggiungere il numero più vicino al 9 che sia un multiplo di 4, ossia il 12. Quindi si dovranno aggiungere per ciascuna riga di pixel ben 3 byte di valore zero.
Così la struttura di questo blocco sarà come appresso riportata:

.........FF FF FF FF FF FF FF FF FF 00 00 00 FF FF
FF FF FF FF FF FF FF 00 00 00 FF FF FF FF FF FF FF
FF FF 00 00 00 

Questa regola vale anche nel caso di un'immagine rettangolare, poiché essa si applica soltanto all'insieme dei gruppi di 3 byte che impostano il colore dei relativi pixel e che compogono una riga, ossia la lunghezza (width) in pixel della immagine.