Struttura BITMAPINFOHEADER (wingdi.h)

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

La struttura BITMAPINFOHEADER contiene informazioni sulle dimensioni e il formato di colore di una bitmap indipendente dal dispositivo .DIB.

Nota Questa struttura è descritta anche nella documentazione GDI. Tuttavia, la semantica per i dati video è leggermente diversa rispetto alla semantica usata per GDI. Se si usa questa struttura per descrivere i dati video, usare le informazioni fornite qui.
 

Sintassi

typedef struct tagBITMAPINFOHEADER {
  DWORD biSize;
  LONG  biWidth;
  LONG  biHeight;
  WORD  biPlanes;
  WORD  biBitCount;
  DWORD biCompression;
  DWORD biSizeImage;
  LONG  biXPelsPerMeter;
  LONG  biYPelsPerMeter;
  DWORD biClrUsed;
  DWORD biClrImportant;
} BITMAPINFOHEADER, *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;

Members

biSize

Specifica il numero di byte richiesti dalla struttura. Questo valore non include le dimensioni della tabella dei colori o le dimensioni delle maschere di colore, se vengono aggiunte alla fine della struttura. Vedere la sezione Osservazioni.

biWidth

Specifica la larghezza della bitmap, in pixel. Per informazioni sul calcolo dello stride della bitmap, vedere Osservazioni.

biHeight

Specifica l'altezza della bitmap, in pixel.

  • Per le bitmap RGB non compresse, se biHeight è positivo, la bitmap è un DIB in basso con l'origine nell'angolo inferiore sinistro. Se biHeight è negativo, la bitmap è un DIB superiore verso il basso con l'origine nell'angolo superiore sinistro.
  • Per le bitmap YUV, la bitmap è sempre in alto, indipendentemente dal segno di biHeight. I decodificatori devono offrire formati YUV con biHeight positivi, ma per la compatibilità con le versioni precedenti devono accettare formati YUV con biHeight positivi o negativi.
  • Per i formati compressi, biHeight deve essere positivo, indipendentemente dall'orientamento dell'immagine.

biPlanes

Specifica il numero di piani per il dispositivo di destinazione. Questo valore deve essere impostato su 1.

biBitCount

Specifica il numero di bit per pixel (bpp). Per i formati non compressi, questo valore è il numero medio di bit per pixel. Per i formati compressi, questo valore è la profondità di bit implicita dell'immagine non compressa, dopo che l'immagine è stata decodificata.

biCompression

Per i formati video compressi e YUV, questo membro è un codice FOURCC, specificato come DWORD nell'ordine little-endian. Ad esempio, il video YUYV ha il controllo FOURCC 'VYUY' o 0x56595559. Per altre informazioni, vedere Codici FOURCC.

Per i formati RGB non compressi, sono possibili i valori seguenti:

Valore Significato
BI_RGB
RGB non compresso.
BI_BITFIELDS
RGB non compresso con maschere di colore. Valido per le bitmap 16-bpp e 32-bpp.
 

Per ulteriori informazioni, vedere la sezione Osservazioni. Si noti che BI_JPG e BI_PNG non sono formati video validi.

Per le bitmap da 16 bpp, se biCompression è uguale a BI_RGB, il formato è sempre RGB 555. Se biCompression è uguale a BI_BITFIELDS, il formato è RGB 555 o RGB 565. Usare il GUID sottotipo nella struttura AM_MEDIA_TYPE per determinare il tipo RGB specifico.

biSizeImage

Specifica le dimensioni, in byte, dell'immagine. Questa opzione può essere impostata su 0 per le bitmap RGB non compresse.

biXPelsPerMeter

Specifica la risoluzione orizzontale, in pixel al metro, del dispositivo di destinazione per la bitmap.

biYPelsPerMeter

Specifica la risoluzione verticale, in pixel al metro, del dispositivo di destinazione per la bitmap.

biClrUsed

Specifica il numero di indici di colore nella tabella dei colori effettivamente usati dalla bitmap. Per ulteriori informazioni, vedere la sezione Osservazioni.

biClrImportant

Specifica il numero di indici di colore considerati importanti per la visualizzazione della bitmap. Se questo valore è zero, tutti i colori sono importanti.

Commenti

Tabelle colori

La struttura BITMAPINFOHEADER può essere seguita da una matrice di voci di tavolozza o maschere di colore. Le regole dipendono dal valore di biCompression.
  • Se biCompression è uguale a BI_RGB e la bitmap usa 8 bpp o meno, la bitmap ha una tabella di colori immediatamente dopo la struttura BITMAPINFOHEADER . La tabella dei colori è costituita da una matrice di valori RGBQUAD . Le dimensioni della matrice vengono specificate dal membro biClrUsed . Se biClrUsed è zero, la matrice contiene il numero massimo di colori per il bitdepth specificato; ovvero 2^biBitCount colori.
  • Se biCompression è uguale a BI_BITFIELDS, la bitmap usa rispettivamente tre maschere di colore DWORD (rosso, verde e blu), che specificano rispettivamente il layout di byte dei pixel. I 1 bit in ogni maschera indicano i bit per tale colore all'interno del pixel.
  • Se biCompression è un video FOURCC, la presenza di una tabella colori è implicita dal formato video. Non è consigliabile presupporre che esista una tabella colori quando la profondità del bit è 8 bpp o minore. Tuttavia, alcuni componenti legacy potrebbero presupporre che sia presente una tabella di colori. Pertanto, se si alloca una struttura BITMAPINFOHEADER , è consigliabile allocare spazio per una tabella dei colori quando la profondità di bit è 8 bpp o meno, anche se la tabella dei colori non viene usata.
Quando bitmapINFOHEADER è seguito da una tabella di colori o da un set di maschere di colore, è possibile usare la struttura BITMAPINFO per fare riferimento alla tabella colori delle maschere di colore. La struttura BITMAPINFO è definita come segue:
typedef struct tagBITMAPINFO {
    BITMAPINFOHEADER bmiHeader;
    RGBQUAD          bmiColors[1];
} BITMAPINFO;

Se si esegue il cast di BITMAPINFOHEADER in bitmapINFO, il membro bmiHeader fa riferimento al membro BITMAPINFOHEADER e al membro bmiColors fa riferimento alla prima voce della tabella dei colori o alla prima maschera di colore.

Tenere presente che se la bitmap usa una tabella colori o maschere di colore, le dimensioni dell'intera struttura di formato ( bitmapINFOHEADER e le informazioni sul colore) non sono uguali sizeof(BITMAPINFOHEADER) o sizeof(BITMAPINFO). È necessario calcolare le dimensioni effettive per ogni istanza.

Calcolo di Surface Stride

In una bitmap non compressa, lo stride è il numero di byte necessari per passare dall'inizio di una riga di pixel all'inizio della riga successiva. Il formato dell'immagine definisce uno stride minimo per un'immagine. Inoltre, l'hardware grafico potrebbe richiedere uno stride più grande per la superficie che contiene l'immagine.

Per i formati RGB non compressi, lo stride minimo è sempre la larghezza dell'immagine in byte, arrotondata fino alla DWORD più vicina. Per calcolare le dimensioni dello stride e dell'immagine, è possibile usare le macro GDI_DIBWIDTHBYTES e/o GDI_DIBSIZE oppure la formula seguente:

stride = ((((biWidth * biBitCount) + 31) & ~31) >> 3);
biSizeImage = abs(biHeight) * stride;

Per i formati YUV, non esiste alcuna regola generale per calcolare lo stride minimo. È necessario comprendere le regole per il formato YUV specifico. Per una descrizione dei formati YUV più comuni, vedere Formati YUV a 8 bit consigliati per il rendering video.

I decodificatori e le origini video devono proporre formati in cui biWidth è la larghezza dell'immagine in pixel. Se il renderer video richiede uno stride di superficie maggiore dell'immagine predefinita, modifica il tipo di supporto proposto impostando i valori seguenti:

  • Imposta biWidth uguale allo stride di superficie in pixel.
  • Imposta il membro rcTarget della struttura VIDEOINFOHEADER o VIDEOINFOHEADER2 uguale alla larghezza dell'immagine, in pixel.
Il renderer video propone quindi il formato modificato chiamando IPin::QueryAccept sul pin upstream. Per altre informazioni su questo meccanismo, vedere Modifiche al formato dinamico.

Se nel buffer dell'immagine è presente un riempimento, non dereferenziare mai un puntatore nella memoria riservata alla spaziatura interna. Se il buffer di immagini è stato allocato in memoria video, la spaziatura interna potrebbe non essere memoria leggibile.

Requisiti

   
Intestazione wingdi.h

Vedi anche

Strutture DirectShow

Struttura VIDEOINFOHEADER

VIDEOINFOHEADER2 Struttura

Uso dei fotogrammi video