Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Observação
Para aplicativos no Windows 10, recomendamos o uso de APIs Windows.UI.Composition em vez de DirectComposition. Para saber mais, veja Modernizar seu aplicativo da área de trabalho usando a camada Visual.
O recorte fornece uma maneira de revelar apenas uma parte de um visual ou de uma árvore visual, limitando a renderização do visual ou da árvore a uma área retangular específica. Este tópico descreve o suporte do Microsoft DirectComposition para recorte de elementos visuais. Inclui as seguintes secções:
Retângulo de recorte
Um objeto visual tem uma propriedade Clip que define uma região retangular, ou retângulo de clipe, dentro do conteúdo de bitmap do visual. Quando o visual é renderizado na tela, apenas a parte do conteúdo de bitmap que está dentro do retângulo do clipe é desenhada na tela, enquanto o conteúdo que se estende para fora do retângulo do clipe é cortado (não desenhado). Por padrão, a propriedade Clip inclui todo o conteúdo de bitmap.
A propriedade Clip de um visual aplica-se a todos os visuais filho e descendente. Em outras palavras, qualquer conteúdo filho ou descendente que fique fora dos limites do retângulo de corte do pai também é cortado.
DirectComposition aplica a propriedade Clip antes de aplicar as propriedades OffsetX, OffsetY e 2D Transform, mas depois de aplicar as propriedades Effect e 3D Transform. Isso significa que as Transformações 2D, OffsetX e OffsetY afetarão o conteúdo visual e o retângulo do clipe. Considerando que as transformações e efeitos 3D não se aplicarão ao retângulo do clipe.
Por exemplo, ao aplicar um deslocamento ou uma transformação 2D, o retângulo do clipe é afetado pela matriz de transformação. Assim, adicionar um deslocamento e uma rotação 2D (45 graus) juntamente com um retângulo de clipe de canto arredondado resultará no seguinte:
Ao aplicar uma transformação 3D "dentro" do retângulo do clipe, o retângulo do clipe não é afetado pela matriz de transformação. Mesmo ao aplicar uma rotação em torno do eixo Z (efetivamente o mesmo que o exemplo anterior), o seguinte diagrama é o resultado:
Observe que o visual girou dentro do clipe porque a matriz 3D não é aplicada ao clipe em si.
Se a propriedade Clip estiver definida como um retângulo vazio, o visual será totalmente cortado; ou seja, o visual está incluído na árvore visual, mas não renderiza nada. Se não quiser incluir um visual específico numa composição, remova o visual da árvore visual em vez de definir um retângulo de clipe vazio. Remover os elementos visuais resulta em melhor desempenho.
Define-se a propriedade Clip de um visual utilizando o método IDCompositionVisual::SetClip. Esse método inclui sobrecargas que permitem definir o valor da propriedade Clip para um retângulo estático ou para um objeto de clipe. Use um retângulo estático se não precisar alterar as dimensões do retângulo do clipe durante a vida útil do visual. Se você precisar alterar as dimensões ou animar o retângulo do clipe, use um objeto de clipe.
Objeto Clip
Um objeto clip é um objeto COM (Component Object Model) que representa um retângulo de clipe. Você cria um objeto clip usando o método IDCompositionDevice::CreateRectangleClip e, em seguida, usa a interface IDCompositionRectangleClip para definir as propriedades do objeto. Um objeto clip recém-criado tem os valores mínimos possíveis para as propriedades Left e Top e os valores máximos possíveis para as propriedades Right e Bottom, tornando-o efetivamente um objeto de clipe no-op. Em outras palavras, o objeto representa um retângulo de clipe que incluiria todo o conteúdo de bitmap de um visual.
Um objeto clipe inclui um conjunto de propriedades que permitem especificar cantos arredondados para o próprio objeto clipe. As propriedades permitem definir o raio x e o raio y de cada canto do objeto de recorte.
Retângulo de clipe animado
Você pode animar um retângulo de clipe aplicando objetos de animação às propriedades Esquerda, Superior, Direita e Inferior de um objeto de clipe. Use o método IDCompositionVisual::SetClip(IDCompositionClip) sobrecarregado para aplicar o retângulo de clipe animado à propriedade Clip de um visual.
Para obter mais informações sobre objetos de animação, consulte Animation.
Tópicos relacionados