轉換 (DirectComposition)

注意

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

本主題討論 Microsoft DirectComposition 支援二維 (2D) 仿射 (線性) 轉換,並描述 DirectComposition 支援的轉換類型。

DirectComposition 也支援 3D 透視轉換,但是因為它們需要建立中繼點陣圖,DirectComposition 會將它們視為效果,而不是轉換。 如需 3D 透視轉換效果的相關信息,請參閱 效果

這個主題包括下列各節:

什麼是 DirectComposition 2D 轉換?

2D轉換可讓您藉由將視覺效果移至另一個位置(轉譯),使其變大或更小(縮放)、旋轉或扭曲其形狀(扭曲),來改變兩維視覺效果的位置、大小或本質。

2D 轉換是藉由將視覺效果的點從相同座標空間中的某個位置對應到另一個位置,或從一個座標空間對應到另一個座標空間來達成。 此對應是由稱為轉換矩陣的值數據表所描述,其定義為三個數據列的集合,其中包含三個浮點值數據行,如下表所示。

M11Default:1.0
M21Default: 0.0
M31OffsetX: 0.0

M12Default: 0.0
M22Default:1.0
M32OffsetY: 0.0

0.0
0.0
1.0

affine 2D 轉換的轉換矩陣是一個 3-by-2 矩陣,會省略上一個轉換矩陣中的第三個數據行。 下表顯示此矩陣的配置。

M11Default:1.0
M21Default: 0.0
M31OffsetX: 0.0

M12Default: 0.0
M22Default:1.0
M32OffsetY: 0.0

注意

將 2D 轉換套用至立體聲內容時,DirectComposition 不會進行特殊處理。 這表示在套用 2D 轉換時,3D 內容可能會出現扭曲。

DirectComposition 2D 座標空間

DirectComposition 使用左手 2D 座標空間;也就是說,正 x 軸值會向右增加,而正 y 軸值則會向下增加。 視覺效果是相對於原點的位置,也就是 X 軸和 Y 軸交集的點(0,0),如下圖所示。

左手座標空間的 X 軸和 Y 軸

藉由在 3-by-2 轉換矩陣中操作值,您可以旋轉、縮放、扭曲,並在兩個維度中轉譯物件。 例如,如果您將 OffsetX 設定為 100,而 OffsetY 設定為 200,則會將物件移至右邊 100 像素,然後向下移動 200 像素。

支援 affine 2D 轉換

下表描述 DirectComposition 所支援的 affine 2D 轉換類型,並列出可用來執行各種轉換類型的介面。

轉換/介面 描述 範例說明
Rotate 2D IDCompositionRotateTransform 依指定中心點的指定角度旋轉視覺效果。 正方形旋轉 45 度左右的正方圖
Scale 2D IDCompositionScaleTransform 依指定之中心點的指定因數調整視覺效果。 方形縮放比例為 130% 的圖例
Skew 2D IDCompositionSkewTransform 沿著 x 軸和 Y 軸沿著指定的角度扭曲視覺效果,以及繞著指定的中心點。 從 Y 軸逆時針逆時針方向旋轉 30 度的方塊圖例
Translate 2D IDCompositionTranslateTransform 變更視覺效果在 X 軸和 Y 軸的方向位置。 正 X 軸上移動 20 個單位,沿著正 y 軸移動 10 個單位

矩陣 2D 轉換

IDCompositionMatrixTransform 介面可讓您定義自己的 3 by-2 affine 2D 轉換矩陣,並將其套用至視覺效果。 如果您需要套用無法透過其他 DirectComposition 轉換介面使用的 affine 2D 轉換類型,這個介面就很有用。 您可以填入 D2D_MATRIX_3X2_F 結構並將其傳遞至 IDCompositionMatrixTransform::SetMatrix 方法,以定義矩陣。

轉換群組

您可以使用轉換群組將多個轉換合併成一個轉換。 轉換群組會定義轉換物件的集合,其矩陣會以集合中指定的順序相乘。 產生的轉換矩陣接著會套用至視覺效果。 轉換群組會產生與個別套用每個轉換相同的結果。

請記住,轉換群組中的轉換物件順序很重要。 例如,如果視覺效果第一次旋轉,然後縮放,然後轉譯,則結果會不同於視覺效果第一次翻譯,然後旋轉,然後縮放。 DirectComposition 一律會根據集合中指定的順序,將轉換套用至視覺效果。

若要建立轉換群組,請先建立要包含在群組中的轉換對象,然後將轉換對象指標的陣列傳遞至 IDCompositionDevice::CreateTransformGroup 方法。 建立轉換群組之後,就無法新增或移除任何轉換物件。 不過,您可以修改集合中個別轉換對象的屬性,而變更將會反映在產生的轉換矩陣中。

轉換動畫

轉換的屬性可以產生動畫效果。 當屬性產生動畫效果時,DirectComposition 會隨著時間變更屬性的值,而不是一次變更一次。 建立轉換時,這特別有用。 如需詳細資訊,請參閱 動畫