bitmap Device-Independent
Una bitmap indipendente dal dispositivo (DIB) contiene una tabella colori. Una tabella dei colori descrive in che modo i valori pixel corrispondono ai valori di colore RGB , che descrivono i colori generati dall'emissione di luce. Pertanto, un DIB può ottenere la combinazione di colori appropriata in qualsiasi dispositivo. Un DIB contiene le informazioni sul colore e sulle dimensioni seguenti:
- Formato di colore del dispositivo in cui è stata creata l'immagine rettangolare.
- Risoluzione del dispositivo in cui è stata creata l'immagine rettangolare.
- Tavolozza per il dispositivo in cui è stata creata l'immagine.
- Matrice di bit che esegue il mapping di bit rossi, verdi, blu ( RGB ) triplicati ai pixel nell'immagine rettangolare.
- Identificatore di compressione dei dati che indica lo schema di compressione dei dati (se presente) usato per ridurre le dimensioni della matrice di bit.
Le informazioni sui colori e sulle dimensioni vengono archiviate in una struttura BITMAPINFO , costituita da una struttura BITMAPINFOHEADER seguita da due o più strutture RGBQUAD . La struttura BITMAPINFOHEADER specifica le dimensioni del rettangolo pixel, descrive la tecnologia colore del dispositivo e identifica le combinazioni di compressione usate per ridurre le dimensioni della bitmap. Le strutture RGBQUAD identificano i colori visualizzati nel rettangolo dei pixel.
Esistono due varietà di DIBS:
- UN DIB in basso, in cui l'origine si trova nell'angolo inferiore sinistro.
- Un DIB in alto verso il basso, in cui l'origine si trova nell'angolo superiore sinistro.
Se l'altezza di un DIB, come indicato dal membro Height della struttura dell'intestazione delle informazioni bitmap, è un valore positivo, è un DIB in basso verso il basso; se l'altezza è un valore negativo, è un DIB superiore verso il basso. Non è possibile comprimere i dib in alto verso il basso.
Il formato del colore viene specificato in termini di numero di piani di colore e bit di colore. Il conteggio dei piani di colore è sempre 1; il conteggio dei bit di colore è 1 per le bitmap monocromatiche, 4 per le bitmap VGA e 8, 16, 24 o 32 per le bitmap in altri dispositivi di colore. Un'applicazione recupera il numero di bit di colore usati da un determinato display (o stampante) chiamando la funzione GetDeviceCaps , specificando BITSPIXEL come secondo argomento.
La risoluzione di un dispositivo di visualizzazione viene specificata in pixel per contatore. Un'applicazione può recuperare la risoluzione orizzontale per una visualizzazione video o una stampante seguendo questo processo in tre passaggi.
- Chiamare la funzione GetDeviceCaps , specificando HORZRES come secondo argomento.
- Chiamare GetDeviceCaps una seconda volta, specificando HORZSIZE come secondo argomento.
- Dividere il primo valore restituito in base al secondo valore restituito.
L'applicazione può recuperare la risoluzione verticale usando lo stesso processo in tre passaggi con parametri diversi: VERTRES al posto di HORZRES e VERTSIZE al posto di HORZSIZE.
La tavolozza è rappresentata da una matrice di strutture RGBQUAD che specificano i componenti di intensità rossa, verde e blu per ogni colore nella tavolozza dei colori di un dispositivo visualizzato. Ogni indice di colore nella matrice della tavolozza esegue il mapping a un pixel specifico nell'area rettangolare associata alla bitmap. Le dimensioni di questa matrice, in bit, equivale alla larghezza del rettangolo, in pixel, moltiplicata per l'altezza del rettangolo, in pixel, moltiplicata per il numero di bit di colore per il dispositivo. Un'applicazione può recuperare le dimensioni del tavolozza del dispositivo chiamando la funzione GetDeviceCaps , specificando NUMCOLORS come secondo argomento.
Windows supporta la compressione della matrice di tavolozza per 8-bpp e 4-bpp in basso. Queste matrici possono essere compresse usando lo schema di codifica run-length (RLE). Lo schema RLE usa valori a 2 byte, il primo byte specifica il numero di pixel consecutivi che usano un indice di colore e il secondo byte che specifica l'indice. Per altre informazioni sulla compressione bitmap, vedere la descrizione delle strutture BITMAPINFOHEADER, BITMAPFILEHEADER, BITMAPV4HEADER e BITMAPV5HEADER.
Un'applicazione può creare un DIB da un DDB inizializzando le strutture necessarie e chiamando la funzione GetDIBits . Per determinare se un dispositivo supporta questa funzione, chiamare la funzione GetDeviceCaps , specificando RC_DI_BITMAP come flag RASTERCAPS.
Un'applicazione che deve copiare una bitmap può usare TransparentBlt per copiare tutti i pixel in una bitmap di origine in una bitmap di destinazione, ad eccezione di quelli che corrispondono al colore trasparente.
Un'applicazione può usare un DIB per impostare pixel nel dispositivo visualizzato chiamando setDIBitsToDevice o la funzione StretchDIBits . Per determinare se un dispositivo supporta la funzione SetDIBitsToDevice , chiamare la funzione GetDeviceCaps , specificando RC_DIBTODEV come flag RASTERCAPS. Specificare RC_STRETCHDIB come flag RASTERCAPS per determinare se il dispositivo supporta StretchDIBits.
Un'applicazione che deve semplicemente visualizzare un DIB preesistente può usare la funzione SetDIBitsToDevice . Ad esempio, un'applicazione foglio di calcolo può aprire grafici esistenti e visualizzarli in una finestra usando la funzione SetDIBitsToDevice . Per ridisegnare ripetutamente una bitmap in una finestra, tuttavia, l'applicazione deve usare la funzione BitBlt . Ad esempio, un'applicazione multimediale che combina grafica animata con suono può trarre vantaggio dalla chiamata alla funzione BitBlt perché viene eseguita più velocemente rispetto a SetDIBitsToDevice.