Обрезка (DirectComposition)
Примечание
Для приложений на Windows 10 рекомендуется использовать API Windows.UI.Composition вместо DirectComposition. Дополнительные сведения см. в статье Модернизация классического приложения с помощью визуального слоя.
Обрезка позволяет выявить только часть визуального элемента или визуального дерева, ограничивая отрисовку визуального элемента или дерева определенной прямоугольной областью. В этом разделе описывается поддержка Microsoft DirectComposition для обрезки визуальных элементов. Она включает следующие разделы:
Прямоугольник обрезки
Визуальный объект имеет свойство Clip, которое определяет прямоугольную область или прямоугольник клипа в содержимом растрового изображения визуального элемента. Когда визуальный элемент отображается на экране, на экране рисуется только часть содержимого растрового рисунка, которая находится внутри прямоугольника клипа, а содержимое, которое выходит за пределы прямоугольника клипа, обрезается (не рисуется). По умолчанию свойство Clip включает все содержимое растрового изображения.
Свойство Клип визуального элемента применяется ко всем дочерним и дочерним визуальным элементам. Иными словами, любое дочернее содержимое или содержимое потомков, которое выходит за границы прямоугольника клипа родительского элемента, также обрезается.
DirectComposition применяет свойство Clip перед применением свойств OffsetX, OffsetY и 2D Transform, но после применения свойств Effect и 3D Transform. Это означает, что двухмерные преобразования OffsetX и OffsetY влияют как на визуальное содержимое, так и на прямоугольник клипа. В то время как трехмерные преобразования и эффекты не будут применяться к прямоугольнику клипа.
Например, при применении смещения или двухd-преобразования матрица преобразования влияет на прямоугольник клипа. Таким образом, добавление смещения и двухd поворота (45 градусов) вместе с прямоугольником клипа со скругленным углом приведет к следующему:
При применении трехмерного преобразования "внутри" прямоугольника клипа матрица преобразования не влияет на прямоугольник клипа. Даже при применении поворота вокруг оси Z (фактически такой же, как в предыдущем примере), результатом является следующая схема:
Обратите внимание, что визуальный элемент повернут внутри клипа, так как трехмерная матрица не применяется к самому клипу.
Если для свойства Clip задан пустой прямоугольник, визуальный элемент полностью обрезается; то есть визуальный элемент включается в визуальное дерево, но он ничего не отображает. Если вы не хотите включать определенный визуальный элемент в композицию, удалите его из визуального дерева вместо установки пустого прямоугольника клипа. Удаление визуального элемента приводит к повышению производительности.
Свойство Clip визуального элемента задается с помощью метода IDCompositionVisual::SetClip . Этот метод включает перегрузки, позволяющие задать для свойства Clip значение статического прямоугольника или объекта clip. Используйте статический прямоугольник, если вам не нужно изменять размеры прямоугольника клипа в течение времени существования визуального элемента. Если вам нужно изменить размеры или анимировать прямоугольник клипа, используйте объект clip.
Объект Clip
Объект clip — это com-объект, представляющий прямоугольник клипа. Объект clip создается с помощью метода IDCompositionDevice::CreateRectangleClip , а затем используется интерфейс IDCompositionRectangleClip объекта для задания свойств объекта. Созданный объект clip имеет минимально возможные значения для свойств Left и Top, а также максимально возможные значения для свойств Right и Bottom, что фактически делает его объектом клипа без операции. Другими словами, объект представляет прямоугольник клипа, который будет включать все содержимое растрового изображения визуального элемента.
Объект clip включает набор свойств, позволяющих указать скругленные углы для объекта clip. Свойства позволяют задать радиус x и радиус y каждого угла обрезки объекта.
Прямоугольник анимированного клипа
Прямоугольник клипа можно анимировать, применив объекты анимации к свойствам Left, Top, Right и Bottom объекта clip. Используйте перегруженный метод IDCompositionVisual::SetClip(IDCompositionClip), чтобы применить прямоугольник анимированного клипа к свойству Клип визуального элемента.
Дополнительные сведения об объектах анимации см. в разделе Анимация.
Связанные темы