Estrutura BITMAPINFOHEADER (wingdi.h)
[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]
A estrutura BITMAPINFOHEADER contém informações sobre as dimensões e o formato de cor de um DIB (bitmap independente do dispositivo).
Sintaxe
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;
Membros
biSize
Especifica o número de bytes exigidos pela estrutura . Esse valor não inclui o tamanho da tabela de cores ou o tamanho das máscaras de cores, se elas forem acrescentadas ao final da estrutura. Consulte Observações.
biWidth
Especifica a largura do bitmap, em pixels. Para obter informações sobre como calcular o passo do bitmap, consulte Comentários.
biHeight
Especifica a altura do bitmap, em pixels.
- Para bitmaps RGB descompactados, se biHeight for positivo, o bitmap será um DIB de baixo para cima com a origem no canto inferior esquerdo. Se biHeight for negativo, o bitmap será um DIB de cima para baixo com a origem no canto superior esquerdo.
- Para bitmaps YUV, o bitmap é sempre de cima para baixo, independentemente do sinal de biHeight. Os decodificadores devem oferecer formatos YUV com biHeight positivo, mas para compatibilidade com versões anteriores, eles devem aceitar formatos YUV com biHeight positivo ou negativo.
- Para formatos compactados, biHeight deve ser positivo, independentemente da orientação da imagem.
biPlanes
Especifica o número de planos para o dispositivo de destino. Esse valor deve ser definido como 1.
biBitCount
Especifica o número de bits por pixel (bpp). Para formatos descompactados, esse valor é o número médio de bits por pixel. Para formatos compactados, esse valor é a profundidade de bit implícita da imagem descompactada, depois que a imagem é decodificada.
biCompression
Para formatos de vídeo compactado e YUV, esse membro é um código FOURCC, especificado como um DWORD em ordem little-endian. Por exemplo, o vídeo YUYV tem o FOURCC 'VYUY' ou 0x56595559. Para obter mais informações, consulte Códigos FOURCC.
Para formatos RGB descompactados, os seguintes valores são possíveis:
Valor | Significado |
---|---|
|
RGB descompactado. |
|
RGB descompactado com máscaras de cores. Válido para bitmaps 16-bpp e 32-bpp. |
Confira Comentários para obter mais informações. Observe que BI_JPG e BI_PNG não são formatos de vídeo válidos.
Para bitmaps de 16 bpp, se biCompression for igual a BI_RGB, o formato será sempre RGB 555. Se biCompression for igual a BI_BITFIELDS, o formato será RGB 555 ou RGB 565. Use o GUID do subtipo na estrutura AM_MEDIA_TYPE para determinar o tipo RGB específico.
biSizeImage
Especifica o tamanho, em bytes, da imagem. Isso pode ser definido como 0 para bitmaps RGB descompactados.
biXPelsPerMeter
Especifica a resolução horizontal, em pixels por medidor, do dispositivo de destino para o bitmap.
biYPelsPerMeter
Especifica a resolução vertical, em pixels por medidor, do dispositivo de destino para o bitmap.
biClrUsed
Especifica o número de índices de cores na tabela de cores que são realmente usados pelo bitmap. Confira Comentários para obter mais informações.
biClrImportant
Especifica o número de índices de cores que são considerados importantes para exibir o bitmap. Se esse valor for zero, todas as cores serão importantes.
Comentários
Tabelas de cores
A estrutura BITMAPINFOHEADER pode ser seguida por uma matriz de entradas de paleta ou máscaras de cores. As regras dependem do valor de biCompression.- Se biCompression for igual a BI_RGB e o bitmap usar 8 bpp ou menos, o bitmap terá uma tabela de cores imediatamente após a estrutura BITMAPINFOHEADER . A tabela de cores consiste em uma matriz de valores RGBQUAD . O tamanho da matriz é fornecido pelo membro biClrUsed . Se biClrUsed for zero, a matriz conterá o número máximo de cores para o bitdepth especificado; ou seja, 2^cores biBitCount .
- Se biCompression for igual a BI_BITFIELDS, o bitmap usará três máscaras de cores DWORD (vermelho, verde e azul, respectivamente), que especificam o layout de bytes dos pixels. Os 1 bits em cada máscara indicam os bits dessa cor dentro do pixel.
- Se biCompression for um vídeo FOURCC, a presença de uma tabela de cores será implícita pelo formato de vídeo. Você não deve assumir que existe uma tabela de cores quando a profundidade do bit é de 8 bpp ou menos. No entanto, alguns componentes herdados podem assumir que uma tabela de cores está presente. Portanto, se você estiver alocando uma estrutura BITMAPINFOHEADER , é recomendável alocar espaço para uma tabela de cores quando a profundidade do bit for de 8 bpp ou menos, mesmo que a tabela de cores não seja usada.
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;
Se você converter o BITMAPINFOHEADER em um BITMAPINFO, o membro bmiHeader se referirá a BITMAPINFOHEADER e o membro bmiColors se referirá à primeira entrada na tabela de cores ou à primeira máscara de cores.
Lembre-se de que, se o bitmap usa uma tabela de cores ou máscaras de cores, o tamanho de toda a estrutura de formato ( BITMAPINFOHEADER mais as informações de cor) não é igual a sizeof(BITMAPINFOHEADER)
ou sizeof(BITMAPINFO)
. Você deve calcular o tamanho real de cada instância.
Calculando Surface Stride
Em um bitmap descompactado, o passo a passo é o número de bytes necessários para ir do início de uma linha de pixels até o início da próxima linha. O formato de imagem define um passo mínimo para uma imagem. Além disso, o hardware gráfico pode exigir um passo maior para a superfície que contém a imagem.Para formatos RGB descompactados, o passo mínimo é sempre a largura da imagem em bytes, arredondada para cima até o DWORD mais próximo. Para calcular o tamanho do passo e da imagem, você pode usar as macros GDI_DIBWIDTHBYTES e/ou GDI_DIBSIZE ou a seguinte fórmula:
stride = ((((biWidth * biBitCount) + 31) & ~31) >> 3);
biSizeImage = abs(biHeight) * stride;
Para formatos YUV, não há nenhuma regra geral para calcular o passo mínimo. Você deve entender as regras para o formato YUV específico. Para obter uma descrição dos formatos YUV mais comuns, consulte Formatos YUV recomendados de 8 bits para renderização de vídeo.
Decodificadores e fontes de vídeo devem propor formatos em que biWidth é a largura da imagem em pixels. Se o renderizador de vídeo exigir um avanço de superfície maior que o passo da imagem padrão, ele modificará o tipo de mídia proposto definindo os seguintes valores:
- Ele define biWidth igual ao passo da superfície em pixels.
- Ele define o membro rcTarget da estrutura VIDEOINFOHEADER ou VIDEOINFOHEADER2 igual à largura da imagem, em pixels.
Se houver preenchimento no buffer de imagem, nunca desreferenciar um ponteiro para a memória que foi reservada para o preenchimento. Se o buffer de imagem tiver sido alocado na memória de vídeo, o preenchimento poderá não ser memória legível.
Requisitos
Cabeçalho | wingdi.h |