Преобразования (DirectComposition)
Примечание.
Для приложений в Windows 10 рекомендуется использовать API-интерфейсы Windows.UI.Composition вместо DirectComposition. Дополнительные сведения см. в статье "Модернизация классического приложения с помощью визуального слоя".
В этом разделе рассматривается поддержка двухмерных (2D) преобразований аффинных (линейных) microsoft DirectComposition и описывается типы преобразований, поддерживаемых DirectComposition.
DirectComposition также поддерживает трехмерные преобразования перспективы, но поскольку им требуется создание промежуточного растрового изображения, DirectComposition считает их эффектами, а не преобразованиями. Сведения о эффектах преобразования трехмерной перспективы см. в разделе "Эффекты".
Этот раздел включает следующие подразделы:
- Что такое преобразование DirectComposition 2D?
- Пространство координат DirectComposition 2D
- Поддержка аффинных преобразований 2D
- Преобразования матрицы 2D
- Преобразование групп
- Анимация преобразования
- Связанные статьи
Что такое преобразование 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), как показано на следующем рисунке.
Управляя значениями в матрице преобразования 3-к-2, можно повернуть, масштабировать, наклонить и перевести объект в два измерения. Например, если для параметра OffsetX задано значение 100 и OffsetY равным 200, объект перемещается вправо на 100 пикселей и вниз 200 пикселей.
Поддержка аффинных преобразований 2D
В следующей таблице описываются типы аффинных 2D-преобразований, поддерживаемых DirectComposition, и перечислены интерфейсы, которые можно использовать для выполнения различных типов преобразований.
Преобразование или интерфейс | Description | Иллюстрация |
---|---|---|
Поворот 2D IDCompositionRotateTransform | поворот визуального элемента по указанному углу по указанному центру. | |
Масштабирование 2D IDCompositionScaleTransform | масштабируйте визуальный элемент по указанному фактору о указанной точке центра. | |
Отклонение 2D IDCompositionSkewTransform | Смещение визуального элемента по указанному углу вдоль оси x и оси Y и вокруг указанной точки центра. | |
Перевод 2D IDCompositionTranslateTransform | измените положение визуального элемента в направлении оси X и оси Y. |
Преобразования матрицы 2D
Интерфейс IDCompositionMatrixTransform позволяет определить собственную матрицу преобразования 3-by-2 и применить ее к визуальному элементу. Этот интерфейс полезен, если необходимо применить тип аффинного 2D-преобразования, недоступного через другие интерфейсы преобразования DirectComposition. Вы определяете матрицу, заполняя структуру D2D_MATRIX_3X2_F и передавая ее в метод IDCompositionMatrixTransform::SetMatrix.
Преобразование групп
Группы преобразования можно использовать для объединения нескольких преобразований в один. Группа преобразований определяет коллекцию объектов преобразования, матрицы которых умножаются вместе в порядке, в котором они указаны в коллекции. Результирующая матрица преобразования затем применяется к визуальному элементу. Группа преобразований создает тот же результат, что и при применении каждого преобразования отдельно.
Помните, что порядок объектов преобразования в группе преобразований важен. Например, если визуальный элемент сначала поворачивается, затем масштабируется, а затем преобразуется, результат отличается от того, если визуальный элемент сначала преобразуется, а затем поворачивается, а затем масштабируется. DirectComposition всегда применяет преобразования к визуальному элементу в том порядке, в котором они указаны в коллекции.
Чтобы создать группу преобразований, сначала создайте объекты преобразования, которые необходимо включить в группу, а затем передайте массив указателей объекта преобразования в метод IDCompositionDevice::CreateTransformGroup. После создания группы преобразования невозможно добавить или удалить объекты преобразования. Однако можно изменить свойства отдельных объектов преобразования в коллекции, и изменения будут отражены в результирующей матрице преобразования.
Анимация преобразования
Свойства преобразования можно анимировать. Если свойство анимировано, DirectComposition изменяет значение свойства с течением времени, а не все одновременно. Это особенно полезно при создании переходов. Дополнительные сведения см. в разделе "Анимация".