Tipi di intestazione bitmap
La bitmap ha quattro tipi di intestazione di base:
I quattro tipi di intestazioni bitmap sono differenziati in base al membro Size , ovvero il primo DWORD in ognuna delle strutture.
La struttura BITMAPV5HEADER è una struttura BITMAPV4HEADER estesa, ovvero una struttura BITMAPINFOHEADER estesa. Tuttavia, bitmapINFOHEADER e BITMAPCOREHEADER hanno solo il membro Size in comune con altre strutture di intestazione bitmap.
I formati BITMAPCOREHEADER e BITMAPV4HEADER sono stati sostituiti rispettivamente dai formati BITMAPINFOHEADER e BITMAPV5HEADER. I formati BITMAPCOREHEADER e BITMAPV4HEADER vengono presentati per la completezza e la compatibilità con le versioni precedenti.
Il formato per un DIB è il seguente (per altre informazioni, vedere Archiviazione bitmap ):
- struttura BITMAPFILEHEADER
- BITMAPCOREHEADER, BITMAPINFOHEADER, un BITMAPV4HEADER o una struttura BITMAPV5HEADER.
- una tabella dei colori facoltativa, ovvero un set di strutture RGBQUAD o un set di strutture RGBTRIPLE.
- dati bitmap
- dati facoltativi del profilo
Una tabella colori descrive in che modo i valori pixel corrispondono ai valori di colore RGB. RGB è un modello per descrivere i colori prodotti emettendo luce.
I dati del profilo fanno riferimento al nome del file di profilo (profilo collegato) o ai bit effettivi del profilo (profilo incorporato). Il formato del file inserisce i dati del profilo alla fine del file. I dati del profilo vengono inseriti subito dopo la tabella dei colori (se presente). Tuttavia, se la funzione riceve un DIB compresso, i dati del profilo vengono ricevuti dopo i bit bitmap, ad esempio nel formato di file.
I dati del profilo esistono solo per le strutture BITMAPV5HEADER in cui bV5CSType è PROFILE_LINKED o PROFILE_EMBEDDED. Per le funzioni che ricevono DIB compressi, i dati del profilo vengono restituiti dopo i dati bitmap.
Un dispositivo pallido è qualsiasi dispositivo che usa tavolozze per assegnare colori. L'esempio classico di un dispositivo pallido è un display in esecuzione in profondità di colore a 8 bit (ovvero 256 colori). La visualizzazione in questa modalità usa una tabella colori piccola per assegnare colori a una bitmap. I colori in una bitmap vengono assegnati al colore più vicino nella tavolozza usata dal dispositivo. Il dispositivo pallido non crea una tavolozza ottimale per la visualizzazione della bitmap; usa semplicemente tutto ciò che è nella tavolozza corrente. Le applicazioni sono responsabili della creazione di una tavolozza e della selezione nel sistema. In generale, le bitmap a 16, 24 e 32 bit per pixel (bpp) non contengono tabelle colori (ad esempio tavolozze ottimali per la bitmap); l'applicazione è responsabile della generazione di una tavolozza ottimale in questo caso. Tuttavia, le bitmap da 16, 24 e 32 bpp possono contenere tabelle colori ottimali per la visualizzazione su dispositivi pallido; in questo caso l'applicazione deve semplicemente creare una tavolozza basata sulla tabella dei colori presente nel file bitmap.
Le bitmap che sono 1, 4 o 8 bpp devono avere una tabella colori con una dimensione massima in base al bpp. La dimensione massima per 1, 4 e 8 bitmap bpp è 2 alla potenza del bpp. Pertanto, una bitmap da 1 bpp ha un massimo di due colori, la bitmap 4 bpp ha un massimo di 16 colori e la bitmap 8 bpp ha un massimo di 256 colori.
Le bitmap con dimensioni 16, 24 o 32-bpp non richiedono tabelle colori, ma possono essere necessarie per specificare i colori per i dispositivi pallido. Se è presente una tabella colori per la bitmap 16, 24 o 32-bpp, il membro biClrUsed specifica le dimensioni della tabella dei colori e la tabella dei colori deve avere molti colori. Se biClrUsed è zero, non esiste alcuna tabella colori.
Le maschere di campo di bit rosso, verde e blu per le bitmap BI_BITFIELD seguono immediatamente le strutture BITMAPINFOHEADER, BITMAPV4HEADER e BITMAPV5HEADER. Le strutture BITMAPV4HEADER e BITMAPV5HEADER contengono membri aggiuntivi per maschere rosse, verdi e blu come indicato di seguito.
Member | significato |
---|---|
Maschera rossa | Maschera di colore che specifica il componente rosso di ogni pixel, valida solo se il membro Compression è impostato su BI_BITFIELDS. |
Maschera verde | Maschera di colore che specifica il componente verde di ogni pixel, valido solo se il membro Compression è impostato su BI_BITFIELDS. |
BlueMask | Maschera di colore che specifica il componente blu di ogni pixel, valida solo se il membro Compression è impostato su BI_BITFIELDS. |
Quando il membro biCompression di BITMAPINFOHEADER è impostato su BI_BITFIELDS e la funzione riceve un argomento di tipo LPBITMAPINFO, le maschere di colore seguiranno immediatamente l'intestazione. La tabella dei colori, se presente, seguirà le maschere di colore. Le bitmap BITMAPCOREHEADER non supportano le maschere di colore.
Per impostazione predefinita, i dati bitmap sono in basso nel formato. Il basso indica che la prima riga di analisi nei dati bitmap è l'ultima riga di analisi da visualizzare. Ad esempio, il 0° pixel della 0riga di analisi dei dati bitmap di una bitmap di 10 pixel per 10 pixel di bitmap sarà il 0 0 pixel della 9a riga di analisi dell'immagine visualizzata o stampata. Le bitmap in formato RLE (Run-Length Encoded) e bitmap BITMAPCOREHEADER non possono essere bitmap dall'alto verso il basso. Le righe di analisi sono allineate AWORD , ad eccezione delle bitmap compresse da RLE. Devono essere riempiti per la larghezza delle linee di analisi, in byte, che non sono divisibile in modo uniforme per quattro, ad eccezione delle bitmap compresse RLE. Ad esempio, una bitmap da 10 a 10 pixel 24-bpp avrà due byte di riempimento alla fine di ogni riga di analisi.