Recorte (DirectComposition)

Nota

En el caso de las aplicaciones en Windows 10, se recomienda usar las API de Windows.UI.Composition en lugar de DirectComposition. Para obtener más información, consulta Modernize your desktop app using the Visual layer (Modernización de la aplicación de escritorio mediante la capa visual).

El recorte proporciona una manera de mostrar solo una parte de un árbol visual o visual limitando la representación del objeto visual o árbol a un área rectangular determinada. En este tema se describe la compatibilidad de Microsoft DirectComposition con los objetos visuales de recorte. Se incluyen las secciones siguientes:

Rectángulo de recorte

Un objeto visual tiene una propiedad Clip que define una región rectangular o un rectángulo de recorte dentro del contenido del mapa de bits del objeto visual. Cuando el objeto visual se representa en la pantalla, solo se dibuja la parte del contenido del mapa de bits que está dentro del rectángulo de clip en la pantalla, mientras que el contenido que se extiende fuera del rectángulo del clip se recorta (no dibuja). De forma predeterminada, la propiedad Clip incluye todo el contenido del mapa de bits.

La propiedad Clip de un objeto visual se aplica a todos los objetos visuales secundarios y descendientes. En otras palabras, cualquier contenido secundario o descendiente que se encuentre fuera de los límites del rectángulo del clip del elemento primario también se recorta.

DirectComposition aplica la propiedad Clip antes de aplicar las propiedades OffsetX, OffsetY y 2D Transform, pero después de aplicar las propiedades Effect y 3D Transform. Esto significa que las transformaciones 2D, OffsetX y OffsetY afectarán tanto al contenido visual como al rectángulo del clip. Mientras que las transformaciones y efectos 3D no se aplicarán al rectángulo de clip.

Por ejemplo, al aplicar una transformación de desplazamiento o 2D, el rectángulo de clip se ve afectado por la matriz de transformación. Por lo tanto, agregar un desplazamiento y un giro 2D (45 grados) junto con un rectángulo de recorte de esquina redondeado dará como resultado:

diagrama de que muestra el efecto de una transformación 2d en un rectángulo de clip.

Al aplicar una transformación 3D "dentro" del rectángulo de clip, el rectángulo de clip no se ve afectado por la matriz de transformación. Incluso cuando se aplica una rotación alrededor del eje Z (eficazmente igual que el ejemplo anterior), el siguiente diagrama es el resultado:

diagrama que muestra que una transformación 3d no afecta al clip del rectángulo (el objeto visual gira dentro del clip).

Tenga en cuenta que el objeto visual girado dentro del clip porque la matriz 3D no se aplica al propio clip.

Si la propiedad Clip se establece en un rectángulo vacío, el objeto visual se recorta completamente; es decir, el objeto visual se incluye en el árbol visual, pero no representa nada. Si no desea incluir un objeto visual determinado en una composición, quite el objeto visual del árbol visual en lugar de establecer un rectángulo de clip vacío. Quitar el objeto visual da como resultado un mejor rendimiento.

La propiedad Clip de un objeto visual se establece mediante el método IDCompositionVisual::SetClip . Este método incluye sobrecargas que permiten establecer el valor de la propiedad Clip en un rectángulo estático o en un objeto clip. Use un rectángulo estático si no es necesario cambiar las dimensiones del rectángulo de recorte durante la vigencia del objeto visual. Si necesita cambiar las dimensiones o animar el rectángulo de clip, use un objeto clip.

Clip (objeto)

Un objeto clip es un objeto Component Object Model (COM) que representa un rectángulo de clip. Cree un objeto clip mediante el método IDCompositionDevice::CreateRectangleClip y, a continuación, use la interfaz IDCompositionRectangleClip del objeto para establecer las propiedades del objeto. Un objeto clip recién creado tiene los valores mínimos posibles para las propiedades Left y Top, y los valores máximos posibles para las propiedades Right e Bottom, lo que lo convierte en un objeto clip sin operación. En otras palabras, el objeto representa un rectángulo de clip que incluiría todo el contenido del mapa de bits de un objeto visual.

Un objeto clip incluye un conjunto de propiedades que permiten especificar esquinas redondeadas para el objeto clip. Las propiedades permiten establecer el radio x y el radio y de cada esquina del objeto de recorte.

Rectángulo de clip animado

Puede animar un rectángulo de clip aplicando objetos de animación a las propiedades Left, Top, Right y Bottom de un objeto clip. Use el método sobrecargado IDCompositionVisual::SetClip(IDCompositionClip) para aplicar el rectángulo de clip animado a la propiedad Clip de un objeto visual.

Para obtener más información sobre los objetos de animación, vea Animación.

Conceptos de DirectComposition

Cómo recortar con un objeto clip de rectángulo