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


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

Примечание

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

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

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

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

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

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

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

M11Default: 1.0
M21Default: 0.0
M31OffsetX: 0.0

M12Default: 0.0
M22Default: 1.0
M32OffsetY: 0,0

0,0
0,0
1,0

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

M11Default: 1.0
M21Default: 0.0
M31OffsetX: 0.0

M12Default: 0.0
M22Default: 1.0
M32OffsetY: 0,0

Примечание

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

 

Двухd-координатное пространство DirectComposition

DirectComposition использует левостороннюю двухстороннюю координатную область; то есть положительные значения оси X увеличиваются вправо, а положительные значения оси Y — вниз. Визуальные элементы расположены относительно источника, то есть точки пересечения оси X и оси Y (0, 0), как показано на следующем рисунке.

оси X и Y левосторонней координатной области

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

Поддержка аффинных двухd-преобразований

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

Преобразование или интерфейс Описание Иллюстрация
Rotate 2Didcompositionrotatetransform[newline] повернуть визуальный элемент на заданный угол относительно указанной центральной точки. изображение квадрата, повернутого на 45 градусов по часовой стрелке относительно центра исходного квадрата
Scale 2Didcompositionscaletransform[newline] масштабирование визуального элемента по указанному коэффициенту относительно указанной центральной точки. иллюстрация квадрата с масштабом 130 процентов
Неравномерное 2Didcompositionskewtransform[newline] смещение визуального элемента на указанный угол вдоль оси X и оси Y, а также вокруг указанной центральной точки. Иллюстрация квадратного наклона на 30 градусов против часовой стрелки от оси Y
Translate 2Didcompositiontranslatetransform[newline] изменить положение визуального элемента в направлении оси X и оси Y. Иллюстрация квадрата, перемещенного на 20 единиц вдоль положительной оси X и 10 единиц вдоль положительной оси Y

 

Матричные двухd-преобразования

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

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

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

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

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

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

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

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