Share via


クリッピング (DirectComposition)

Note

Windows 10上のアプリの場合は、DirectComposition ではなく Windows.UI.Composition API を使用することをお勧めします。 詳細については、「 Visual レイヤーを使用してデスクトップ アプリをモダン化する」を参照してください。

クリッピングは、ビジュアルまたはツリーのレンダリングを特定の四角形領域に制限することで、ビジュアルまたはビジュアル ツリーの一部のみを表示する方法を提供します。 このトピックでは、クリッピング ビジュアルに対する Microsoft DirectComposition のサポートについて説明します。 次のセクションが含まれています。

四角形のクリップ

ビジュアル オブジェクトには、ビジュアルのビットマップ コンテンツ内で四角形領域 ( クリップ四角形) を定義する Clip プロパティがあります。 ビジュアルを画面にレンダリングすると、クリップ四角形内にあるビットマップ コンテンツの部分のみが画面に描画され、クリップ四角形の外側に延びるコンテンツはクリップされます (描画されません)。 既定では、Clip プロパティにはすべてのビットマップ コンテンツが含まれます。

ビジュアルの Clip プロパティは、すべての子ビジュアルと子孫ビジュアルに適用されます。 つまり、親のクリップ四角形の境界外にある子コンテンツまたは子孫コンテンツもクリップされます。

DirectComposition は、OffsetX、OffsetY、および 2D Transform プロパティを適用する前に Clip プロパティを適用しますが、Effect プロパティと 3D Transform プロパティを適用した後に適用されます。 つまり、2D Transforms、OffsetX、OffsetY は、ビジュアル コンテンツとクリップ四角形の両方に影響します。 一方、3D 変換と効果はクリップ四角形には適用されません。

たとえば、オフセットまたは 2D 変換を適用する場合、クリップの四角形は変換行列の影響を受けます。 そのため、オフセットと 2D 回転 (45 度) と角丸いクリップ四角形を追加すると、次のようになります。

クリップ四角形に対する 2d 変換の効果を示す図。

クリップ四角形内で 3D 変換を適用する場合、クリップ四角形は変換行列の影響を受けません。 Z 軸の周りに回転を適用する場合 (実質的には前の例と同じです)、次の図は結果です。

3d 変換が四角形クリップに影響しないことを示す図 (ビジュアルはクリップ内で回転します)。

3D マトリックスがクリップ自体に適用されないため、ビジュアルはクリップ内で回転されることに注意してください。

Clip プロパティが空の四角形に設定されている場合、ビジュアルは完全にクリップされます。つまり、ビジュアルはビジュアル ツリーに含まれますが、何もレンダリングされません。 コンポジションに特定のビジュアルを含める必要がない場合は、空のクリップ四角形を設定するのではなく、ビジュアル ツリーからビジュアルを削除します。 ビジュアルを削除すると、パフォーマンスが向上します。

IDCompositionVisual::SetClip メソッドを使用して、ビジュアルの Clip プロパティを設定します。 このメソッドには、Clip プロパティの値を静的な四角形またはクリップ オブジェクトに設定できるオーバーロードが含まれています。 ビジュアルの有効期間中にクリップ四角形の寸法を変更する必要がない場合は、静的四角形を使用します。 寸法を変更する必要がある場合、またはクリップの四角形をアニメーション化する必要がある場合は、クリップ オブジェクトを使用します。

Clip オブジェクト

クリップ オブジェクトは、クリップ四角形を表すコンポーネント オブジェクト モデル (COM) オブジェクトです。 クリップ オブジェクトは 、IDCompositionDevice::CreateRectangleClip メソッドを使用して作成し、オブジェクトの IDCompositionRectangleClip インターフェイスを使用してオブジェクトのプロパティを設定します。 新しく作成されたクリップ オブジェクトには、Left プロパティと Top プロパティに使用できる最小値と、Right プロパティと Bottom プロパティで使用可能な最大値が含まれており、実質的に No-op クリップ オブジェクトになります。 つまり、 オブジェクトは、ビジュアルのビットマップ コンテンツ全体を含むクリップ四角形を表します。

クリップ オブジェクトには、クリップ オブジェクトの角を丸く指定できる一連のプロパティが含まれています。 プロパティを使用すると、クリッピング オブジェクトの各コーナーの x 半径と y 半径を設定できます。

アニメーションクリップの四角形

クリップ オブジェクトの Left、Top、Right、Bottom の各プロパティにアニメーション オブジェクトを適用することで、クリップ四角形をアニメーション化できます。 アニメーション化されたクリップ四角形をビジュアルの Clip プロパティに適用するには、 IDCompositionVisual::SetClip(IDCompositionClip) オーバーロードされたメソッドを使用します。

アニメーション オブジェクトの詳細については、「 アニメーション」を参照してください。

DirectComposition の概念

四角形クリップ オブジェクトを使用してクリップする方法