Структура BITMAPINFOHEADER (wingdi.h)
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]
Структура BITMAPINFOHEADER содержит сведения о измерениях и цветовом формате аппаратно-независимого растрового изображения (DIB).
Синтаксис
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 возможны следующие значения:
Значение | Значение |
---|---|
|
Несжатый RGB. |
|
Несжатый 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 бит/с или меньше, даже если таблица цветов не используется.
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 , равный ширине изображения в пикселях.
Если в буфере изображений есть заполнение, никогда не разыменовывание указателя в памяти, зарезервированной для заполнения. Если буфер изображений выделен в видеопамяти, заполнение может оказаться недоступным для чтения.
Требования
Верхняя часть | wingdi.h |