Top-Down и Bottom-Up DIB

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

Если вы не знакомы с графическим программированием, можно ожидать, что растровое изображение будет упорядочено в памяти таким образом, чтобы верхняя строка изображения отображалась в начале буфера, а затем следующая строка и т. д. Однако это не обязательно так. В Windows независимые от устройства растровые изображения (DIB) можно размещать в памяти в двух разных ориентациях: снизу вверх и сверху вниз.

В diB снизу вверх буфер изображения начинается с нижней строки пикселей, за которой следует следующая строка вверх и т. д. Верхняя строка изображения является последней строкой в буфере. Поэтому первым байтом в памяти является нижний левый пиксель изображения. В GDI все DIB находятся снизу вверх. На следующей схеме показан физический макет diB снизу вверх.

снизу вверх dib

В dib сверху вниз порядок строк является обратным. Верхняя строка изображения — это первая строка в памяти, за которой следует следующая строка вниз. Нижняя строка изображения является последней строкой в буфере. При использовании dib сверху вниз первым байтом в памяти является верхний левый пиксель изображения. DirectDraw использует dib сверху вниз. На следующей схеме показан физический макет diB сверху вниз:

сверху вниз dib

Для RGB DIB ориентация изображения обозначается элементом biHeight структуры BITMAPINFOHEADER . Если значение biHeight положительное, изображение отображается снизу вверх. Если значение biHeight отрицательное, изображение отображается сверху вниз.

DIB-объекты в форматах YUV всегда находятся сверху вниз, а знак члена biHeight игнорируется. Декодеры должны предлагать форматы YUV с положительным значением biHeight, но они также должны принимать форматы YUV с отрицательным значением biHeight и игнорировать знак .

Кроме того, любой тип DIB, использующий FOURCC в элементе biCompression , должен выражать свое значение biHeight в виде положительного числа независимо от ориентации, так как fourcc сам определяет схему сжатия, ориентацию изображения которой должен понимать любой совместимый фильтр.

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