Преобразования (DirectComposition)
Примечание
Для приложений на Windows 10 рекомендуется использовать API Windows.UI.Composition вместо DirectComposition. Дополнительные сведения см. в статье Модернизация классического приложения с помощью визуального слоя.
В этом разделе рассматривается поддержка Microsoft DirectComposition двухмерных (2D) аффинных (линейных) преобразований, а также описываются типы преобразований, поддерживаемых DirectComposition.
DirectComposition также поддерживает трехмерные преобразования перспективы, но так как для них требуется создание промежуточного растрового изображения, DirectComposition считает их эффектами, а не преобразованиями. Сведения о эффектах преобразования трехмерной перспективы см. в разделе Эффекты.
Этот раздел включает следующие подразделы:
- Что такое 2D-преобразование DirectComposition?
- Двухd-координатное пространство DirectComposition
- Поддержка аффинных двухd-преобразований
- Матричные двухd-преобразования
- Преобразование групп
- Анимация преобразования
- Связанные темы
Что такое 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), как показано на следующем рисунке.
Управляя значениями в матрице преобразования "3 на 2", можно повернуть, масштабировать, исказить и преобразовать объект в двух измерениях. Например, если параметр OffsetX имеет значение 100, а OffsetY — 200, объект перемещается вправо на 100 пикселей и вниз на 200 пикселей.
Поддержка аффинных двухd-преобразований
В следующей таблице описаны типы аффинных двухd-преобразований, поддерживаемых DirectComposition, и перечислены интерфейсы, которые можно использовать для выполнения различных типов преобразований.
Преобразование или интерфейс | Описание | Иллюстрация |
---|---|---|
Rotate 2Didcompositionrotatetransform[newline] | повернуть визуальный элемент на заданный угол относительно указанной центральной точки. | ![]() |
Scale 2Didcompositionscaletransform[newline] | масштабирование визуального элемента по указанному коэффициенту относительно указанной центральной точки. | ![]() |
Неравномерное 2Didcompositionskewtransform[newline] | смещение визуального элемента на указанный угол вдоль оси X и оси Y, а также вокруг указанной центральной точки. | ![]() |
Translate 2Didcompositiontranslatetransform[newline] | изменить положение визуального элемента в направлении оси X и оси Y. | ![]() |
Матричные двухd-преобразования
Интерфейс IDCompositionMatrixTransform позволяет определить собственную матрицу аффинного двухмерного преобразования 3 на 2 и применить ее к визуальному элементу. Этот интерфейс полезен, если необходимо применить тип аффинного двухd-преобразования, который недоступен через другие интерфейсы преобразования DirectComposition. Матрица определяется путем заполнения структуры D2D_MATRIX_3X2_F и передачи ее в метод IDCompositionMatrixTransform::SetMatrix .
Преобразование групп
Группы преобразования можно использовать для объединения нескольких преобразований в одно. Группа преобразования определяет коллекцию объектов преобразования, матрицы которых умножаются вместе в порядке, в котором они указаны в коллекции. Полученная матрица преобразования затем применяется к визуальному элементу. Группа преобразований дает тот же результат, что и при применении каждого преобразования по отдельности.
Помните, что порядок объектов преобразования в группе преобразования имеет важное значение. Например, если визуальный элемент сначала поворачивается, затем масштабируется, а затем преобразуется, результат отличается от результата, если визуальный элемент сначала переводится, затем поворачивается, а затем масштабируется. DirectComposition всегда применяет преобразования к визуальному элементу в том порядке, в котором они указаны в коллекции.
Чтобы создать группу преобразования, сначала создайте объекты преобразования, которые необходимо включить в группу, а затем передайте массив указателей объектов преобразования в метод IDCompositionDevice::CreateTransformGroup . После создания группы преобразования нельзя добавлять или удалять объекты преобразования. Однако можно изменить свойства отдельных объектов преобразования в коллекции, и изменения будут отражены в результирующей матрице преобразования.
Анимация преобразования
Свойства преобразования можно анимировать. Когда свойство анимируется, DirectComposition изменяет значение свойства с течением времени, а не все сразу. Это особенно полезно при создании переходов. Дополнительные сведения см. в разделе Анимация.
Связанные темы
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по