共用方式為


轉換 (DirectComposition)

注意

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

本主題討論二維 (2D) affine (線性) 轉換的 Microsoft DirectComposition 支援,並描述 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 不會進行特殊處理。 這表示 3D 內容在套用 2D 轉換時可能會扭曲。

 

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 2Didcompositionrotatetransform[newline] 依指定的中心點的指定角度旋轉視覺效果。 正方形旋轉 45 度,順時針旋轉原始正方形中央的圖例
Scale 2Didcompositionscaletransform[newline] 依據指定之中心點的指定因素調整視覺效果。 正方形縮放比例為 130% 的圖例
Skew 2Didcompositionskewtransform[newline] 沿著 X 軸和 Y 軸,沿著指定的中心點繞著指定的角度扭曲視覺效果。 正方形扭曲 30 度從 Y 軸逆時針的圖例
Translate 2Didcompositiontranslatetransform[newline] 變更視覺效果在 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 會隨著時間變更屬性的值,而不是一次全部變更。 這在建立轉換時特別有用。 如需詳細資訊,請參閱 動畫

DirectComposition 概念