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


Преобразования (DirectComposition)

Примечание.

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

В этом разделе рассматривается поддержка двухмерных (2D) преобразований аффинных (линейных) microsoft DirectComposition и описывается типы преобразований, поддерживаемых DirectComposition.

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

Этот раздел включает следующие подразделы:

Что такое преобразование DirectComposition 2D?

Преобразование 2D позволяет изменять положение, размер или характер визуального элемента в двух измерениях путем перемещения визуального элемента в другое расположение (перевод), что делает его более большим или меньшим (масштабирование), превращая его (поворот) или искажая ее форму (смещение).

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

M11Default: 1.0
M21Default: 0.0
M31OffsetX: 0.0

M12Default: 0.0
M22Default: 1.0
M32OffsetY: 0.0

0,0
0,0
1.0

Матрица преобразования для аффинных 2D-преобразований — это матрица 3-к-2, которая исключает третий столбец из предыдущей матрицы преобразования. В следующей таблице показан макет этой матрицы.

M11Default: 1.0
M21Default: 0.0
M31OffsetX: 0.0

M12Default: 0.0
M22Default: 1.0
M32OffsetY: 0.0

Примечание.

DirectComposition не выполняет специальную обработку при применении 2D-преобразований к стереоконтенту. Это означает, что трехмерное содержимое может быть искажено при применении к нему преобразования 2D.

Пространство координат DirectComposition 2D

DirectComposition использует левое пространство координат 2D; То есть положительные значения оси x увеличиваются до справа и положительных значений оси Y, нисходящего вниз. Визуальные элементы расположены относительно источника, то есть точка, в которой пересекаются оси x и оси Y (0, 0), как показано на следующем рисунке.

ось x и y левой оси координат

Управляя значениями в матрице преобразования 3-к-2, можно повернуть, масштабировать, наклонить и перевести объект в два измерения. Например, если для параметра OffsetX задано значение 100 и OffsetY равным 200, объект перемещается вправо на 100 пикселей и вниз 200 пикселей.

Поддержка аффинных преобразований 2D

В следующей таблице описываются типы аффинных 2D-преобразований, поддерживаемых DirectComposition, и перечислены интерфейсы, которые можно использовать для выполнения различных типов преобразований.

Преобразование или интерфейс Description Иллюстрация
Поворот 2D IDCompositionRotateTransform поворот визуального элемента по указанному углу по указанному центру. иллюстрация квадратного поворота 45 градусов по часовой стрелке по центру исходного квадрата
Масштабирование 2D IDCompositionScaleTransform масштабируйте визуальный элемент по указанному фактору о указанной точке центра. иллюстрация квадратного масштабирования на 130 процентов
Отклонение 2D IDCompositionSkewTransform Смещение визуального элемента по указанному углу вдоль оси x и оси Y и вокруг указанной точки центра. иллюстрация квадратного скоса на 30 градусов по счетчику с оси Y
Перевод 2D IDCompositionTranslateTransform измените положение визуального элемента в направлении оси X и оси Y. Иллюстрация квадрата перемещала 20 единиц вдоль положительной оси x и 10 единиц вдоль положительной оси Y

Преобразования матрицы 2D

Интерфейс IDCompositionMatrixTransform позволяет определить собственную матрицу преобразования 3-by-2 и применить ее к визуальному элементу. Этот интерфейс полезен, если необходимо применить тип аффинного 2D-преобразования, недоступного через другие интерфейсы преобразования DirectComposition. Вы определяете матрицу, заполняя структуру D2D_MATRIX_3X2_F и передавая ее в метод IDCompositionMatrixTransform::SetMatrix.

Преобразование групп

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

Помните, что порядок объектов преобразования в группе преобразований важен. Например, если визуальный элемент сначала поворачивается, затем масштабируется, а затем преобразуется, результат отличается от того, если визуальный элемент сначала преобразуется, а затем поворачивается, а затем масштабируется. DirectComposition всегда применяет преобразования к визуальному элементу в том порядке, в котором они указаны в коллекции.

Чтобы создать группу преобразований, сначала создайте объекты преобразования, которые необходимо включить в группу, а затем передайте массив указателей объекта преобразования в метод IDCompositionDevice::CreateTransformGroup. После создания группы преобразования невозможно добавить или удалить объекты преобразования. Однако можно изменить свойства отдельных объектов преобразования в коллекции, и изменения будут отражены в результирующей матрице преобразования.

Анимация преобразования

Свойства преобразования можно анимировать. Если свойство анимировано, DirectComposition изменяет значение свойства с течением времени, а не все одновременно. Это особенно полезно при создании переходов. Дополнительные сведения см. в разделе "Анимация".