Condividi tramite


bitmap Device-Independent

Una bitmap indipendente dal dispositivo (DIB) contiene una tabella colori . Una tabella colori descrive il modo in cui i valori pixel corrispondono ai valori di colore RGB, che descrivono i colori prodotti emettendo luce. Di conseguenza, un DIB può ottenere la combinazione di colori appropriata in qualsiasi dispositivo. Un DIB contiene le informazioni sul colore e sulla dimensione 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 rosso, verde, blu ( RGB ) triplica in 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 sul colore e sulla dimensione vengono archiviate in una strutturaBITMAPINFO, costituita da una strutturaBITMAPINFOHEADERseguita da due o più strutture RGBQUAD. La struttura BITMAPINFOHEADER specifica le dimensioni del rettangolo pixel, descrive la tecnologia dei colori del dispositivo e identifica gli schemi di compressione usati per ridurre le dimensioni della bitmap. Le strutture RGBQUAD identificano i colori visualizzati nel rettangolo pixel.

Esistono due varietà di DIB:

  • DIB inferiore, in cui l'origine si trova nell'angolo inferiore sinistro.
  • DIB dall'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 di intestazione delle informazioni bitmap, è un valore positivo, si tratta di un DIB inferiore; se l'altezza è un valore negativo, è un DIB dall'alto verso il basso. I DIB dall'alto verso il basso non possono essere compressi.

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 numero di bit di colore è 1 per bitmap monocromatiche, 4 per bitmap VGA e 8, 16, 24 o 32 per bitmap in altri dispositivi di colore. Un'applicazione recupera il numero di bit di colore utilizzati 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 metro. Un'applicazione può recuperare la risoluzione orizzontale per una visualizzazione video o una stampante seguendo questo processo in tre passaggi.

  1. Chiamare la funzione GetDeviceCaps, specificando HORZRES come secondo argomento.
  2. Chiamare GetDeviceCaps una seconda volta, specificando HORZSIZE come secondo argomento.
  3. Dividere il primo valore restituito per il 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 struttureRGBQUADche specificano i componenti di intensità rosso, verde e blu per ogni colore nella tavolozza dei colori di un dispositivo di visualizzazione. Ogni indice di colore nella matrice della tavolozza è mappato a un pixel specifico nell'area rettangolare associata alla bitmap. Le dimensioni di questa matrice, in bit, sono equivalenti alla larghezza del rettangolo, in pixel, moltiplicata per l'altezza del rettangolo, in pixel, moltiplicata per il conteggio dei bit di colore per il dispositivo. Un'applicazione può recuperare le dimensioni della tavolozza del dispositivo chiamando la funzionegetDeviceCaps, specificando NUMCOLORS come secondo argomento.

Windows supporta la compressione della matrice di tavolozza per i DIB di 8-bpp e 4-bpp in basso. Queste matrici possono essere compresse usando lo schema RLE (Run-Length Encoding). Lo schema RLE usa valori a 2 byte, il primo byte che 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 struttureBITMAPINFOHEADER, BITMAPFILEHEADER, BITMAPV4HEADERe BITMAPV5HEADER.

Un'applicazione può creare un diB da un database di database inizializzando le strutture necessarie e chiamando la funzioneGetDIBits. Per determinare se un dispositivo supporta questa funzione, chiamare la funzioneGetDeviceCaps, 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 dei pixel corrispondenti al colore trasparente.

Un'applicazione può usare un DIB per impostare i pixel nel dispositivo di visualizzazione chiamando il SetDIBitsToDevice o la funzione StretchDIBits. Per determinare se un dispositivo supporta la funzione SetDIBitsToDevice, chiamare la funzioneGetDeviceCaps, 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 funzionebitBlt. Ad esempio, un'applicazione multimediale che combina grafica animata con suoni può trarre vantaggio dalla chiamata alla funzione BitBlt perché viene eseguita più velocemente di SetDIBitsToDevice.