Поделиться через


Структура BITMAPINFOHEADER (wingdi.h)

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]

Структура BITMAPINFOHEADER содержит сведения о измерениях и цветовом формате аппаратно-независимого растрового изображения (DIB).

Примечание Эта структура также описана в документации по GDI. Однако семантика видеоданных немного отличается от семантики, используемой для GDI. Если вы используете эту структуру для описания видеоданных, используйте приведенную здесь информацию.
 

Синтаксис

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;

Члены

biSize

Указывает количество байтов, необходимых для структуры. Это значение не включает размер таблицы цветов или размер цветовых масок, если они добавляются в конец структуры. См. заметки.

biWidth

Задает ширину растрового изображения в пикселях. Сведения об вычислении шага растрового изображения см. в разделе Примечания.

biHeight

Задает высоту растрового изображения в пикселях.

  • Для несжатых растровых изображений RGB, если значение biHeight положительное, то растровое изображение представляет собой diB снизу вверх с источником в левом нижнем углу. Если значение biHeight отрицательное, то растровое изображение представляет собой diB сверху вниз с источником в левом верхнем углу.
  • Для растровых рисунков YUV растровое изображение всегда находится сверху вниз, независимо от знака biHeight. Декодеры должны предлагать форматы YUV с положительным значением biHeight, но для обратной совместимости они должны принимать форматы YUV с положительным или отрицательным значением biHeight.
  • Для сжатых форматов значение biHeight должно быть положительным независимо от ориентации изображения.

biPlanes

Указывает количество плоскостей для целевого устройства. Это значение должно быть равно 1.

biBitCount

Указывает количество битов на пиксель (bpp). Для несжатых форматов это значение является средним числом битов на пиксель. Для сжатых форматов это значение представляет собой неявную битовую глубину несжатого изображения после декодирования изображения.

biCompression

Для сжатых форматов видео и YUV этот элемент представляет собой код FOURCC, указанный в виде DWORD в порядке байтов. Например, в видео YUYV есть функция FOURCC "VYUY" или 0x56595559. Дополнительные сведения см. в разделе Коды FOURCC.

Для несжатых форматов RGB возможны следующие значения:

Значение Значение
BI_RGB
Несжатый RGB.
BI_BITFIELDS
Несжатый RGB с цветными масками. Допустимо для растровых изображений 16 бит/с и 32 битовых изображений.
 

Дополнительные сведения см. в разделе "Примечания". Обратите внимание, что BI_JPG и BI_PNG являются недопустимыми форматами видео.

Для растровых изображений со скоростью 16 бит/с, если biCompression равно BI_RGB, формат всегда имеет формат RGB 555. Если параметр biCompression равен BI_BITFIELDS, используется формат RGB 555 или RGB 565. Используйте GUID подтипа в структуре AM_MEDIA_TYPE для определения конкретного типа RGB.

biSizeImage

Указывает размер изображения (в байтах). Это значение может быть равным 0 для несжатых растровых изображений RGB.

biXPelsPerMeter

Указывает горизонтальное разрешение (в пикселях на метр) целевого устройства для растрового изображения.

biYPelsPerMeter

Задает вертикальное разрешение (в пикселях на метр) целевого устройства для растрового изображения.

biClrUsed

Указывает количество цветовых индексов в таблице цветов, которые фактически используются растровым рисунком. Дополнительные сведения см. в разделе "Примечания".

biClrImportant

Указывает количество цветовых индексов, которые считаются важными для отображения растрового изображения. Если это значение равно нулю, важны все цвета.

Комментарии

Таблицы цветов

За структурой BITMAPINFOHEADER может следовать массив элементов палитры или цветовых масок. Правила зависят от значения biCompression.
  • Если значение biCompression равно BI_RGB , а растровое изображение использует 8 бит/с или меньше, то растровое изображение имеет таблицу цветов сразу после структуры BITMAPINFOHEADER . Таблица цветов состоит из массива значений RGBQUAD . Размер массива определяется элементом biClrUsed . Если параметр biClrUsed равен нулю, массив содержит максимальное количество цветов для заданного битового значения; то есть 2^biBitCount colors.
  • Если параметр biCompression равен BI_BITFIELDS, то растровое изображение использует три цветовые маски DWORD (красная, зеленая и синяя соответственно), которые определяют байтовый макет пикселей. 1 бит в каждой маске указывают биты для этого цвета в пикселе.
  • Если biCompression является видео FOURCC, наличие цветовой таблицы подразумевается форматом видео. Не следует предполагать, что таблица цветов существует, если битовая глубина составляет 8 бит/с или меньше. Однако некоторые устаревшие компоненты могут предполагать наличие цветовой таблицы. Поэтому при выделении структуры BITMAPINFOHEADER рекомендуется выделить место для таблицы цветов, если глубина бита составляет 8 бит/с или меньше, даже если таблица цветов не используется.
Если за элементом BITMAPINFOHEADER следует таблица цветов или набор цветовых масок, можно использовать структуру BITMAPINFO для ссылки на таблицу цветов цветовых масок. Структура BITMAPINFO определяется следующим образом:
typedef struct tagBITMAPINFO {
    BITMAPINFOHEADER bmiHeader;
    RGBQUAD          bmiColors[1];
} BITMAPINFO;

При приведении BITMAPINFOHEADER к BITMAPINFO член bmiHeader ссылается на BITMAPINFOHEADER , а член bmiColors — на первую запись в таблице цветов или на первую маску цвета.

Имейте в виду, что если растровое изображение использует таблицу цветов или маски цветов, то размер всей структуры формата ( BITMAPINFOHEADER и сведения о цвете) не равен sizeof(BITMAPINFOHEADER) или sizeof(BITMAPINFO). Необходимо вычислить фактический размер каждого экземпляра.

Вычисление шага поверхности

В несжатом растровом рисунке шаг — это количество байтов, необходимое для перехода от начала одной строки пикселей до начала следующей строки. Формат изображения определяет минимальный шаг для изображения. Кроме того, графическому оборудованию может потребоваться больший шаг для поверхности, содержащей изображение.

Для несжатых форматов RGB минимальным шагом всегда является ширина изображения в байтах, округленная до ближайшего значения DWORD. Чтобы вычислить шаг и размер изображения, можно использовать макросы GDI_DIBWIDTHBYTES и (или) GDI_DIBSIZE или следующую формулу:

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

Для форматов YUV не существует общего правила вычисления минимального шага. Необходимо понимать правила для конкретного формата YUV. Описание наиболее распространенных форматов YUV см. в разделе Рекомендуемые 8-разрядные форматы YUV для отрисовки видео.

Декодеры и источники видео должны предлагать форматы, где biWidth — это ширина изображения в пикселях. Если для отрисовщика видео требуется шаг поверхности, превышающий шаг изображения по умолчанию, он изменяет предлагаемый тип носителя, задавая следующие значения:

  • Он задает значение biWidth , равное шагу поверхности в пикселях.
  • Он задает член rcTarget структуры VIDEOINFOHEADER или VIDEOINFOHEADER2 , равный ширине изображения в пикселях.
Затем отрисовщик видео предлагает измененный формат, вызывая IPin::QueryAccept в вышестоящий закреплении. Дополнительные сведения об этом механизме см. в разделе Изменения динамического формата.

Если в буфере изображений есть заполнение, никогда не разыменовывание указателя в памяти, зарезервированной для заполнения. Если буфер изображений выделен в видеопамяти, заполнение может оказаться недоступным для чтения.

Требования

   
Верхняя часть wingdi.h

См. также раздел

Структуры DirectShow

Структура VIDEOINFOHEADER

Структура VIDEOINFOHEADER2

Работа с видеокадрами