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


Top-Down и Bottom-Up DIOb

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

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

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

вниз внизу

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

вниз вниз

Для ИДЕНТИФИКАТОРОВ RGB ориентация изображения указывается элементом biHeight структуры BITMAPINFOHEADER. Если biHeight положительным, изображение находится внизу. Если biHeight отрицательно, изображение находится сверху вниз.

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

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

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