共用方式為


位圖物件

注意

針對 Windows 10 上的應用程式,我們建議使用 Windows.UI.Composition API,而不是 DirectComposition。 如需詳細資訊,請參閱 使用視覺層將傳統型應用程式現代化。

Microsoft DirectComposition 是位圖撰寫引擎。 它可讓應用程式開發人員結合多個點陣圖,並以各種方式作這些點陣圖,以在應用程式 UI 中達成有趣的視覺效果和動畫。 本主題描述 DirectComposition 支援的點陣圖內容類型。

點陣圖內容

應用程式藉由建立視覺物件,然後設定這些物件的 Content 屬性,為 DirectComposition 提供位圖內容來撰寫和產生動畫效果。 DirectComposition 不提供任何點陣化服務。 應用程式必須使用其他軟體型或硬體加速點陣化連結庫,例如 Direct2DDirect3D,以填入要撰寫的位圖。 撰寫之後,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 模式,應用程式必須先使用 Direct2DDirectWrite,將子圖元涵蓋範圍數據寫入位圖。 接下來,應用程式必須設定正確的 Alpha 模式,並在將點陣圖與視覺效果產生關聯時指定文字色彩。 DirectComposition 會將文字色彩與涵蓋範圍數據混合,這會針對背景產生 ClearType 混合。

在 ClearType 演算法不適用的情況下,例如,如果點陣化不是圖元對齊和軸對齊,或者如果它需要繪製到中繼表面,DirectComposition 就可以使用位陣圖中的子圖元涵蓋範圍數據來改為產生灰階點陣化,且不需額外費用。

如需詳細資訊,請參閱 IDCompositionDevice::CreateSurfaceIDCompositionDevice::CreateVirtualSurface 函式 alphaMode 參數的描述。

DirectComposition 概念