共用方式為


Top-Down 與 Bottom-Up DIB

[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayer、imfMediaEngine 取代,並在媒體基金會 音訊/視訊擷取。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能在媒體 基礎中使用 MediaPlayerIMFMediaEngine 音訊/視訊擷取,而不是 DirectShow。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]

如果您不熟悉圖形程序設計,您可能會預期點圖會排列在記憶體中,讓影像的頂端數據列出現在緩衝區開頭,後面接著下一列,依此類推。 不過,這不一定是這種情況。 在 Windows 中,裝置獨立的點陣圖 (DIB) 可以放在記憶體中,以兩個不同的方向,由上而下和由上而下。

在從下到下 DIB 中,影像緩衝區會以圖元的下列開始,後面接著下一個數據列,依此類推。 影像的最上一列是緩衝區的最後一個數據列。 因此,記憶體中的第一個字節是影像的左下角圖元。 在 GDI 中,所有 DIB 都是由下而上。 下圖顯示從下到下 DIB 的實體配置。

從下到下 dib

在由上而下 DIB 中,數據列的順序會反轉。 影像的最上一列是記憶體中的第一個數據列,後面接著下一個數據列。 影像的底端數據列是緩衝區的最後一個數據列。 使用由上而下 DIB 時,記憶體中的第一個字節是影像的左上方圖元。 DirectDraw 使用由上至下 DIB。 下圖顯示從上到下 DIB 的實體配置:

從上到下 dib

針對 RGB DIB,影像方向是由 BITMAPINFOHEADER 結構的 biHeight 成員表示。 如果 biHeight 為正數,影像會由下而下。 如果 biHeight 為負數,影像會由上而下。

YUV 格式的 DIB 一律由上而下,而且會忽略 biHeight 成員的正負號。 譯碼器應提供具有正 biHeight的 YUV 格式,但它們也應該接受具有負 biHeight 的 YUV 格式,並忽略符號。

此外,任何使用 biCompression 成員中 FOURCC 的 DIB 類型,無論其方向為何,都應該將其 biHeight 表示為正數,因為 FOURCC 本身會識別出任何相容篩選應瞭解其影像方向的壓縮配置。

使用視訊畫面