다음을 통해 공유


Top-Down vs. Bottom-Up DIB

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngineMedia Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 DirectShow 대신 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

그래픽 프로그래밍을 접하는 경우 이미지의 맨 위 행이 버퍼의 시작 부분에 나타나고 다음 행이 뒤에 오도록 비트맵이 메모리에 정렬될 것으로 예상할 수 있습니다. 그러나 반드시 그렇지는 않습니다. Windows에서 디바이스 독립적 비트맵(DIB)은 상향식 및 하향식의 두 가지 방향으로 메모리에 배치할 수 있습니다.

상향식 DIB에서 이미지 버퍼는 픽셀의 맨 아래 행으로 시작하고 다음 행 위로 등으로 시작합니다. 이미지의 맨 위 행은 버퍼의 마지막 행입니다. 따라서 메모리의 첫 번째 바이트는 이미지의 왼쪽 아래 픽셀입니다. GDI에서 모든 DIB는 상향식입니다. 다음 다이어그램은 상향식 DIB의 실제 레이아웃을 보여 주는 다이어그램입니다.

상향식 dib

하향식 DIB에서는 행 순서가 반전됩니다. 이미지의 맨 위 행은 메모리의 첫 번째 행이고 그 뒤에 다음 행이 아래쪽입니다. 이미지의 아래쪽 행은 버퍼의 마지막 행입니다. 하향식 DIB를 사용하면 메모리의 첫 번째 바이트가 이미지의 왼쪽 위 픽셀입니다. DirectDraw는 하향식 DIB를 사용합니다. 다음 다이어그램은 하향식 DIB의 실제 레이아웃을 보여줍니다.

하향식 딥

RGB DIB의 경우 이미지 방향은 BITMAPINFOHEADER 구조체의 biHeight 멤버로 표시됩니다. biHeight가 양수이면 이미지가 상향식입니다. biHeight가 음수이면 이미지는 하향식입니다.

YUV 형식의 DIB는 항상 하향식이며 biHeight 멤버의 기호는 무시됩니다. 디코더는 양수 biHeight가 있는 YUV 형식을 제공해야 하지만 음수 biHeight 가 있는 YUV 형식도 수락하고 기호를 무시해야 합니다.

또한 biCompression 멤버에서 FOURCC를 사용하는 모든 DIB 형식은 해당 biHeight를 방향에 관계없이 양수로 표현해야 합니다. FOURCC 자체는 호환되는 필터에서 이미지 방향을 이해해야 하는 압축 체계를 식별하기 때문에 양수로 표현해야 합니다.

비디오 프레임 작업