位圖物件
注意
針對 Windows 10 上的應用程式,我們建議使用 Windows.UI.Composition API,而不是 DirectComposition。 如需詳細資訊,請參閱 使用視覺層將傳統型應用程式現代化。
Microsoft DirectComposition 是位圖撰寫引擎。 它可讓應用程式開發人員結合多個點陣圖,並以各種方式作這些點陣圖,以在應用程式 UI 中達成有趣的視覺效果和動畫。 本主題描述 DirectComposition 支援的點陣圖內容類型。
點陣圖內容
應用程式藉由建立視覺物件,然後設定這些物件的 Content 屬性,為 DirectComposition 提供位圖內容來撰寫和產生動畫效果。 DirectComposition 不提供任何點陣化服務。 應用程式必須使用其他軟體型或硬體加速點陣化連結庫,例如 Direct2D 或 Direct3D,以填入要撰寫的位圖。 撰寫之後,DirectComposition 會將撰寫的點陣圖內容傳遞至 Desktop Window Manager (DWM),以便轉譯至畫面。
DirectComposition 支援的點陣圖內容類型 Microsoft DirectComposition 支援下列類型的位圖:
視訊記憶體位圖
視訊記憶體位圖會使用 Microsoft DirectX 方法在硬體中點陣化(包括 DX 到 GDI Interop 模型)。 它是由呼叫應用程式和 DirectComposition 可見的跨進程共用介面所支援。 視訊記憶體位圖不受撕裂影響,因為應用程式只能從 DirectComposition 紋理的來源表面讀取。
視訊內容
應用程式可以使用 DirectComposition 來撰寫使用系結至 DirectComposition 介面之 DirectX 無窗換鏈結的視訊畫面。 就概念上講,DirectComposition 會將影片內容視為一連串位圖。 DirectComposition 不提供呈現視訊畫面的方法。
DirectComposition 支援 DirectX 無窗換鏈結,也就是未繫結至特定視窗的交換鏈結,並可讓兩個不同的應用程式跨進程界限共用無窗換鏈結。 共用無窗換鏈結可讓影片案例在一個進程中建立交換鏈結,並在第二個進程中與 DirectComposition 搭配使用。 無窗換鏈結是使用 IDXGIFactory2::CreateSwapChainForCompositionSurface 方法來建立。
如需 DirectX 交換鏈結的詳細資訊,請參閱 DXGI 概觀。
立體聲內容
從概念上講,立體交換鏈結是由代表立體 3D 內容左右通道的 DirectX 圖形基礎結構 (DXGI) 表面Microsoft所組成。 當立體交換鏈結當做視覺效果的點陣圖資源使用時,DirectComposition 會在立體聲中撰寫。 所有非立體內容(mono 內容)都會被視為具有相同的左右通道內容:也就是說,這兩個通道都會使用相同的點陣圖內容。 DirectComposition 會分別撰寫所有左側內容和所有右側內容。 如果顯示裝置無法進行立體化,DirectComposition 會將左右立體聲通道視為單聲道內容,並且只針對位圖資源使用該數據撰寫。
DirectComposition 不支援建立或作立體聲內容,而且無法將單聲道交換鏈結升級為立體聲組。 應用程式必須先執行這些工作,才能將 DirectX 立體聲內容呈現至 DirectComposition。 此外,應用程式必須提供深度感知的左右通道位移;DirectComposition 無法調整左右通道位移,以修改 DirectX 立體聲內容的感知深度。
當具備立體聲功能的硬體可用時,DirectX 立體聲內容會組成並保存至 DWM。
視窗點陣圖
「視窗位圖」不是真正的點陣化即時取代的佔位元元。 視窗點陣圖類似於 DWM 縮圖,不同之處在於縮圖可以包含許多視窗的貢獻,例如擁有的非子視窗,而 DirectComposition 視窗點陣圖一律只是一個視窗及其子系的表示法。
由於 DirectComposition 可以存取所有視窗和所有可視化樹狀結構重新導向介面,因此它可以重複使用多個可視化樹狀結構中一個視窗的內容。 窗口必須分層,因為非分層窗口沒有專用的重新導向表面,因此,其點陣化不一定可供 DirectComposition 使用。
若要使用視窗點陣圖,應用程式會將視覺效果與視窗控點 (HWND) 產生關聯。 之後,每當視窗的內容變更時,DirectComposition 會重新撰寫視覺效果,包括因為與視窗相關聯之可視化樹狀結構變更而變更的內容時。 換句話說,例如 DWM 縮圖,DirectComposition 視窗點陣圖是「即時」。
將點陣圖內容與視覺效果產生關聯
針對這三種點陣圖,應用程式可以將相同的點陣圖與多個視覺效果產生關聯,這表示單一記憶體配置可以用來顯示相同的內容數次。
Alpha 色板
所有點陣圖都有每像素 32 位 (BPP) 格式,其中包含每個像素透明度的 8 位。 不過,應用程式可以指定 DirectComposition 應該如何使用 Alpha 色板。 特別是 DirectComposition 可以尊重 Alpha 色板,也可以完全忽略 Alpha,在此情況下,點圖會被視為完全不透明。
其他 Alpha 模式會忽略 Alpha 色板,但會將紅色、綠色和藍色值視為每個色板 Alpha 值,而不是將這些色板的一般解譯視為色彩強度。 此模式適用於 ClearType 轉譯,需要子圖元涵蓋範圍資訊。 若要使用每個通道 Alpha 模式,應用程式必須先使用 Direct2D 和 DirectWrite,將子圖元涵蓋範圍數據寫入位圖。 接下來,應用程式必須設定正確的 Alpha 模式,並在將點陣圖與視覺效果產生關聯時指定文字色彩。 DirectComposition 會將文字色彩與涵蓋範圍數據混合,這會針對背景產生 ClearType 混合。
在 ClearType 演算法不適用的情況下,例如,如果點陣化不是圖元對齊和軸對齊,或者如果它需要繪製到中繼表面,DirectComposition 就可以使用位陣圖中的子圖元涵蓋範圍數據來改為產生灰階點陣化,且不需額外費用。
如需詳細資訊,請參閱 IDCompositionDevice::CreateSurface 或 IDCompositionDevice::CreateVirtualSurface 函式 alphaMode 參數的描述。
相關主題