Vai al contenuto principale

Formati di file

Cos'è il BMP? Il formato bitmap spiegato in modo semplice

Il BMP è il formato bitmap di Windows, non compresso e senza perdita. Spieghiamo la struttura delle intestazioni, le profondità di colore, i limiti e come rendere i file più leggeri.

Autore: Hemen Dönüştür Editör EkibiPubblicato: 9 min di lettura

Immagine di copertina della guida al formato BMP

Il BMP è uno dei formati di immagine più antichi e semplici del mondo Windows. Un file BMP di solito scrive i pixel sul disco riga per riga, senza alcuna compressione. Questa semplicità lo rende facile da leggere e senza perdita, ma la stessa semplicità rende i file enormi. In questo articolo vediamo da dove viene il BMP, cosa c'è dentro il file, i dettagli su profondità di colore e trasparenza, dove lo si incontra ancora oggi e come convertire i file BMP in formati più pratici.

Cos'è il BMP?

Il BMP (bitmap, estensione .bmp) è un formato di file di immagine raster, cioè basato sui pixel. La documentazione tecnica lo chiama anche DIB, bitmap indipendente dal dispositivo (device-independent bitmap). "Indipendente dal dispositivo" significa che l'immagine può essere interpretata allo stesso modo a prescindere dalla scheda grafica o dalla stampante su cui è stata creata: il file contiene nella propria intestazione e nella tabella dei colori le informazioni necessarie per decodificarne i colori.

Secondo la documentazione Win32 di Microsoft, un file bitmap inizia con una struttura BITMAPFILEHEADER, seguita da un BITMAPINFOHEADER, BITMAPV4HEADER o BITMAPV5HEADER, poi da una tabella dei colori facoltativa e infine dai dati dei pixel. Il tipo MIME è image/bmp.

Breve storia: da Windows e OS/2 a oggi

Il BMP è nato dal lavoro congiunto di Microsoft e IBM su Windows e OS/2 alla fine degli anni '80. Le bitmap dell'epoca di Windows 1.0 dipendevano fortemente dal dispositivo di uscita; la forma indipendente dal dispositivo si è diffusa con Windows 3.0 nel 1990. Il BITMAPCOREHEADER di 12 byte definito per OS/2 Presentation Manager è il motivo per cui si parla ancora di file "BMP OS/2".

Negli anni il formato è stato esteso aggiungendo campi alla fine dell'intestazione. Secondo la scheda del formato della Library of Congress, la versione 5 è arrivata con Windows 98 nel 1998 e ha reso possibile registrare nel file i profili colore ICC. Le dimensioni di intestazione più comuni oggi sono:

IntestazioneDimensioneNovità principale
BITMAPCOREHEADER12 byteStruttura di base compatibile con OS/2 1.x
BITMAPINFOHEADER40 byteL'intestazione più comune, da Windows 3.0; campi per compressione e risoluzione
BITMAPV4HEADER108 byteMaschere dei colori, una maschera alfa e informazioni sullo spazio colore
BITMAPV5HEADER124 byteProfili ICC incorporati o collegati, intento di rendering

I lettori capiscono quale intestazione è in uso dal valore di dimensione nel suo primo campo. Questo permette ai programmi meno recenti di ignorare i campi più nuovi e leggere comunque le informazioni di base.

Dentro un file BMP

L'intestazione del file e la firma "BM"

Ogni file BMP inizia con un'intestazione di file di 14 byte, i cui primi due byte sono i caratteri ASCII BM (esadecimale 42 4D). L'intestazione memorizza la dimensione totale del file e la posizione in byte in cui iniziano i dati dei pixel. Un DIB copiato negli appunti di Windows (il formato CF_DIB) omette questi 14 byte e inizia direttamente con l'intestazione informativa.

L'intestazione informativa

L'intestazione informativa contiene larghezza, altezza, bit per pixel (biBitCount), tipo di compressione, risoluzione orizzontale e verticale (in pixel per metro) e il numero di colori usati nella tabella dei colori.

La tabella dei colori (tavolozza)

Nelle immagini a 8 bit per pixel o meno, un pixel non è un colore ma un indice nella tabella dei colori. Nell'esempio documentato da Microsoft, una bitmap di 32x32 con 16 colori ha una matrice di pixel di 32 x 32 x 4 = 4096 bit, perché 4 bit bastano per indirizzare 16 colori.

I dati dei pixel: righe dal basso verso l'alto e allineamento a 4 byte

Il BMP ha due caratteristiche insolite. La prima: se l'altezza è positiva, le righe sono memorizzate dal basso verso l'alto, cioè la prima riga del file è l'ultima riga in basso dell'immagine. Un'altezza negativa memorizza le righe dall'alto verso il basso, ma queste immagini non possono essere compresse. La seconda: ogni riga viene riempita fino a un multiplo di 4 byte. Microsoft indica la lunghezza della riga (stride) così:

stride = ((width * bitCount + 31) & ~31) >> 3
imageSize = |height| * stride

Per un'immagine di 1920x1080 a 24 bit ogni riga misura 1920 x 3 = 5.760 byte (già un multiplo di 4), quindi i dati dei pixel occupano 5.760 x 1.080 = 6.220.800 byte. Con i 54 byte di intestazione il file pesa circa 6,2 MB. La stessa immagine in JPG di solito ne occupa una piccola frazione.

Profondità di colore, compressione e trasparenza

La documentazione del BITMAPV5HEADER definisce 1, 4, 8, 16, 24 e 32 bit per pixel (il valore 0 indica che la profondità deriva da dati JPEG o PNG incorporati). 1 bit è bianco e nero, 4 bit sono 16 colori e 8 bit una tavolozza di 256 colori. A 24 bit ogni pixel occupa tre byte nell'ordine blu, verde, rosso.

Il campo della compressione può assumere questi valori:

  • BI_RGB: nessuna compressione. Nella pratica è il caso della grande maggioranza dei file BMP.
  • BI_RLE8 e BI_RLE4: una semplice codifica run-length per immagini a tavolozza a 8 e 4 bit. Utile per grandi aree uniformi, quasi inutile per le foto.
  • BI_BITFIELDS: non è una compressione; delle maschere definiscono dove si trovano i bit del rosso, del verde e del blu nei pixel a 16 e 32 bit (ad esempio RGB 565).
  • BI_JPEG e BI_PNG: consentono dati JPEG o PNG all'interno della bitmap. Raramente supportati dai visualizzatori generici.

La trasparenza è l'aspetto meno coerente del BMP. La maschera alfa delle intestazioni V4 e V5 può definire il quarto byte di un pixel a 32 bit come opacità, ma in un BMP a 32 bit classico quel byte è descritto come inutilizzato e molti programmi lo ignorano. Non è quindi strano che un BMP a 32 bit appaia trasparente in un programma e su sfondo nero in un altro. Se ti serve la trasparenza, il PNG è una scelta molto più sicura.

Supporto in sistemi, browser e programmi

Il BMP si apre quasi ovunque. I visualizzatori integrati di Windows e Paint, Anteprima di macOS e i visualizzatori più diffusi su Linux lo leggono tutti. La guida ai formati di immagine di MDN indica il supporto al BMP in tutte le versioni di Chrome, Edge, Firefox, Opera e Safari. La stessa guida sottolinea però che i file BMP non compressi sono molto grandi rispetto a PNG o JPG e in generale vanno evitati per i contenuti dei siti web.

Dove si usa il BMP oggi?

  • Risorse delle applicazioni Windows e software datato: immagini delle barre degli strumenti, grafica delle procedure di installazione e alcune risorse dei videogiochi sono ancora in BMP.
  • Sistemi embedded e microcontrollori: un dispositivo con display non ha bisogno di un decodificatore JPEG; i dati dei pixel possono essere copiati direttamente sullo schermo.
  • Telecamere industriali, scanner e strumenti di test: quando serve un'uscita grezza e senza perdita, il BMP è un formato intermedio semplice.
  • Didattica: con un'intestazione di poche decine di byte, il BMP è spesso il primo formato che gli studenti leggono e scrivono nei corsi di elaborazione delle immagini.

Punti di forza e debolezze

Punti di forzaDebolezze
Senza perdita; i valori dei pixel non cambiano maiNon compresso, quindi i file sono molto grandi
Facilissimo da leggere e scrivere, nessun costo di CPUSupporto alla trasparenza incoerente
Si apre in quasi tutti i sistemi operativi e browserScarso supporto ai metadati (EXIF, descrizioni)
Le modalità a tavolozza sono adatte ai dispositivi con poche risorsePoco pratico per il web, l'email e i moduli di caricamento

Problemi comuni e come risolverli

Il file è troppo grande per l'email o per un modulo di caricamento

È il problema più comune. Per foto e scansioni, convertire BMP in JPG di solito riduce il peso di un ordine di grandezza o più. Per screenshot, diagrammi o qualsiasi cosa contenga testo è meglio convertire BMP in PNG: anche il PNG è senza perdita ma è compresso, e non aggiunge il rumore che il JPG crea attorno ai bordi netti.

Un BMP a 32 bit mostra lo sfondo nero

Il programma non riconosce o interpreta male il byte alfa. Di solito la conversione in PNG risolve il problema. Quando si converte in JPG, che non ha trasparenza, le aree trasparenti vengono riempite di bianco o di un colore a tua scelta.

L'immagine è capovolta o inclinata

In un lettore scritto da te questo dipende di solito da due errori: ignorare che le righe sono memorizzate dal basso verso l'alto, oppure non saltare i byte di riempimento alla fine di ogni riga. Usare la formula dello stride vista sopra e controllare il segno dell'altezza evita entrambi.

Un programma si rifiuta di aprire un BMP

I file BMP con compressione RLE, BI_BITFIELDS o dati JPEG/PNG incorporati non sono supportati da alcuni lettori semplici. Salvarli di nuovo come BMP a 24 bit non compresso o convertirli in PNG elimina il problema di compatibilità.

Consigli per la conversione

  • JPG per le foto, PNG per la grafica: quando si abbandona il BMP vale la regola di sempre. Per il web puoi anche scegliere WebP o AVIF nel convertitore di immagini.
  • Mantieni alta la qualità: poiché il BMP è senza perdita, una qualità JPG dell'85-90% dà un risultato difficile da distinguere dall'originale.
  • Riduci se serve: se il file resta pesante, riduci le dimensioni in pixel oppure usa lo strumento per comprimere le immagini per raggiungere un peso obiettivo.
  • Nella direzione opposta: se un dispositivo embedded o un programma datato richiede il BMP, scegli BMP come formato di destinazione nel convertitore di immagini. I nostri strumenti scrivono un BMP standard a 24 bit non compresso; le aree trasparenti vengono appiattite sul colore di sfondo che scegli.

Le nostre pagine di conversione BMP funzionano nel tuo browser: il file non viene caricato e non lascia mai il tuo dispositivo.

Domande frequenti

BMP e DIB sono la stessa cosa?

In pratica sì. Un DIB è la struttura bitmap indipendente dal dispositivo che Windows usa in memoria e negli appunti; un file BMP è quella stessa struttura preceduta da un'intestazione di file di 14 byte.

Il BMP è senza perdita?

Sì. I file BMP non compressi e quelli compressi con RLE conservano esattamente i valori dei pixel. L'unica eccezione è il raro BMP con dati JPEG incorporati.

Convertire un BMP in PNG fa perdere qualità?

No. Anche il PNG è senza perdita; l'immagine resta identica e diventa solo più leggera perché viene compressa.

Posso usare il BMP su un sito web?

I browser visualizzano il BMP, ma i file sono inutilmente pesanti e rallentano le pagine. Per il web usa JPG, PNG, WebP o AVIF.

Il BMP supporta la trasparenza?

Un BMP a 32 bit in teoria può contenere un canale alfa, ma i programmi non lo supportano in modo coerente. Quando ti serve la trasparenza, il PNG è la scelta più sicura.

Fonti

Convertitori correlati

Tutti gli articoli