Freigeben über


Top-Down vs. Bottom-Up DIBs

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]

Wenn Sie noch nicht mit der Grafikprogrammierung sind, können Sie erwarten, dass eine Bitmap im Arbeitsspeicher so angeordnet wird, dass die obere Zeile des Bilds am Anfang des Puffers angezeigt wird, gefolgt von der nächsten Zeile usw. Dies ist jedoch nicht unbedingt der Fall. In Windows können geräteunabhängige Bitmaps (DEVICE-Independent Bitmaps, DIBs) in zwei verschiedenen Ausrichtungen im Arbeitsspeicher platziert werden: von unten nach oben und von oben nach unten.

In einem Bottom-up-DIB beginnt der Bildpuffer mit der unteren Pixelzeile, gefolgt von der nächsten Zeile nach oben usw. Die obere Zeile des Bilds ist die letzte Zeile im Puffer. Daher ist das erste Byte im Arbeitsspeicher das linke untere Pixel des Bilds. In GDI sind alle DIBs bottom-up. Das folgende Diagramm zeigt das physische Layout eines Bottom-up-DIB.

bottom-up dib

In einem DIB von oben nach unten wird die Reihenfolge der Zeilen umgekehrt. Die obere Zeile des Bilds ist die erste Zeile im Arbeitsspeicher, gefolgt von der nächsten Zeile nach unten. Die untere Zeile des Bilds ist die letzte Zeile im Puffer. Bei einem Top-Down-DIB ist das erste Byte im Speicher das pixel oben links des Bilds. DirectDraw verwendet TOP-DOWN-DIBs. Das folgende Diagramm zeigt das physische Layout eines Top-Down-DIB:

top-down dib

Bei RGB-DIBs wird die Bildausrichtung durch den biHeight-Member der BITMAPINFOHEADER-Struktur angegeben. Wenn biHeight positiv ist, ist das Bild bottom-up. Wenn biHeight negativ ist, wird das Bild von oben nach unten angezeigt.

DIBs in YUV-Formaten werden immer von oben nach unten angezeigt, und das Vorzeichen des biHeight-Elements wird ignoriert. Decoder sollten YUV-Formate mit positivem biHeight anbieten, aber sie sollten auch YUV-Formate mit negativem biHeight akzeptieren und das Zeichen ignorieren.

Darüber hinaus sollte jeder DIB-Typ, der einen FOURCC im biCompression-Member verwendet, seine biHeight unabhängig von der Ausrichtung als positive Zahl ausdrücken, da der FOURCC selbst ein Komprimierungsschema identifiziert, dessen Bildausrichtung von jedem kompatiblen Filter verstanden werden soll.

Arbeiten mit Videoframes