Поделиться через


Вырезка (DirectComposition)

Заметка

Для приложений в Windows 10 рекомендуется использовать API-интерфейсы Windows.UI.Composition вместо DirectComposition. Для получения дополнительной информации см. модернизация настольного приложения с использованиемвизуального слоя.

Вырезка позволяет показать только часть визуального объекта или элемента дерева, ограничив их отрисовку определенной прямоугольной областью. В этом разделе описывается поддержка Microsoft DirectComposition для вырезки визуальных элементов. Он содержит следующие разделы:

Прямоугольник обрезки

Визуальный объект имеет свойство Clip, определяющее прямоугольную область или прямоугольник клипав содержимом растрового изображения визуального элемента. Когда визуальный элемент отрисовывается на экране, на экране нарисовывается только часть содержимого растрового рисунка, расположенного внутри прямоугольника клипа, а содержимое, которое расширяется за пределами прямоугольника клипа, обрезается (не рисуется). По умолчанию свойство Clip содержит все растровое содержимое.

Свойство клипа визуального элемента применяется ко всем дочерним и нисходящим визуальным элементам. Другими словами, любое дочернее или потомковное содержимое, которое выходит за пределы прямоугольника клипа родительского элемента, также обрезается.

DirectComposition применяет свойство Clip перед применением свойств OffsetX, OffsetY и 2D Transform, но после применения свойств Effect и 3D Transform. То есть 2D-преобразования, OffsetX и OffsetY влияют как на визуальное содержимое, так и на прямоугольник клипа. Трехмерные преобразования и эффекты не будут применяться к прямоугольнику клипа.

Например, при применении смещения или 2D-преобразования прямоугольник клипа подвергается воздействию матрицы преобразования. Таким образом, добавление смещения и 2D поворота (45 градусов) вместе с округленным прямоугольником клипа приведет к следующему:

диаграмма, показывающая эффект 2D-преобразования на обрезной прямоугольник.

При применении трехмерного преобразования "внутри" прямоугольника клипа, матрица преобразования не затрагивает прямоугольник клипа. Даже при применении поворота вокруг оси Z (фактически так же, как и в предыдущем примере), следующая схема является результатом:

диаграмма, показывающая, что трехмерное преобразование не влияет на прямоугольник (визуальный элемент поворачивается в клипе).

Обратите внимание, что визуальный элемент вращается в клипе, так как трехмерная матрица не применяется к самому клипу.

Если свойству Clip присвоено значение пустого прямоугольника, визуальный элемент полностью обрезается; То есть визуальный элемент включается в визуальное дерево, но он ничего не отображает. Если вы не хотите включать определенный визуальный элемент в композицию, удалите его из визуального дерева вместо использования пустого обрезанного прямоугольника. Удаление визуального элемента приводит к повышению производительности.

Свойство Clip визуального элемента устанавливается с помощью метода IDCompositionVisual::SetClip. Этот метод включает перегрузки, позволяющие задать значение свойства Clip статическим прямоугольником или объектом клипа. Используйте статический прямоугольник, если не нужно изменять размеры прямоугольника клипа во время существования визуального элемента. Если необходимо изменить размеры или анимировать прямоугольник клипа, используйте объект клипа.

Объект Clip

Объект клипа — это объект com-модели компонента, представляющий прямоугольник клипа. Вы создаете объект клипа с помощью метода IDCompositionDevice::CreateRectangleClip, а затем используйте интерфейс IDCompositionRectangleClip, чтобы задать свойства объекта. Только что созданный объект клипа имеет минимальные возможные значения для свойств Left и Top, а также максимальные возможные значения для свойств Right и Bottom, эффективно делая его объектом no-op клипа. Другими словами, объект представляет собой область обрезки, которая будет включать все содержимое визуального элемента в виде точечного рисунка.

Объект клипа содержит набор свойств, позволяющих указать круглые угла для объекта клипа. Свойства позволяют задать радиус x и радиус y каждого угла объекта вырезки.

Анимированный прямоугольник клипа

Вы можете анимировать прямоугольник клипа, применяя объекты анимации к свойствам слева, сверху, справа и нижнего края объекта клипа. Используйте перегруженный метод IDCompositionVisual::SetClip(IDCompositionClip), чтобы применить прямоугольник клипа анимации к свойству "Клип" визуального элемента.

Дополнительные сведения об объектах анимации см. в анимации.

Основные понятия DirectComposition

Как обрезать с использованием прямоугольного клипирующего объекта