Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
API-интерфейсы Microsoft.UI.Composition позволяют применять эффекты в режиме реального времени к изображениям и пользовательскому интерфейсу с анимируемыми свойствами эффектов. В этом обзоре мы рассмотрим функциональные возможности, которые позволяют применять эффекты к визуальному элементу композиции в приложениях WinUI и Windows App SDK.
Для поддержки согласованного создания эффектов в приложениях WinUI и пакета Windows App SDK, эффекты композиции используют интерфейс IGraphicsEffect из библиотеки Win2D, что позволяет описывать эффекты с помощью пространства имен Microsoft.Graphics.Canvas.Effects.
Эффекты кисти используются для рисования областей приложения путем применения эффектов к набору существующих изображений. API эффектов композиции пакета SDK для Windows ориентированы на SpriteVisuals. SpriteVisual обеспечивает гибкость при сочетании цветов, изображений и эффектов. Визуальный элемент определяет границы прямоугольника, а кисть определяет пиксели, используемые для рисования.
Кисти эффектов используются для визуальных элементов дерева композиции, содержимое которого поступает из выходных данных графа эффектов. Эффекты могут ссылаться на существующие поверхности/текстуры, но не на выходные данные других деревьев композиции.
Эффекты также можно применять к XAML UIElements с помощью кисти для эффекта с XamlCompositionBrushBase.
Функции эффектов
- Библиотека эффектов
- Эффекты цепочки
- Поддержка анимации
- Константы и анимированные свойства эффектов
- Несколько экземпляров эффектов с независимыми свойствами
Библиотека эффектов
В настоящее время композиция поддерживает следующие эффекты:
| Эффект | Описание |
|---|---|
| 2D-преобразование аффина | Применяет матрицу аффинного преобразования 2D к изображению. |
| Арифметическое объединение | Объединяет два изображения с помощью гибкого уравнения. |
| Эффект смешения | Создает эффект смешения, объединяющий два изображения. Компонент Composition предоставляет 21 из 26 режимов смешения, поддерживаемых в Win2D. |
| Источник цвета | Создает изображение, содержащее сплошный цвет. |
| Composite | Объединяет два изображения. Композиция предоставляет все 13 составных режимов , поддерживаемых в Win2D. |
| Контрастность | Увеличивает или уменьшает контрастность изображения. |
| Экспозиция | Увеличивает или уменьшает экспозицию изображения. |
| Оттенки серого | Преобразует изображение в монохромный серый. |
| Гамма-передача | Изменяет цвета изображения, применяя функцию гамма-передачи по каналу. |
| Поворот оттенка | Изменяет цвет изображения, вращая его значения оттенка. |
| Инвертировать | Инвертирует цвета изображения. |
| Сатурировать | Изменяет насыщенность изображения. |
| Сепия | Преобразует изображение в тон сепии. |
| Температура и оттенок | Настраивает температуру и (или) оттенок изображения. |
Дополнительные сведения см. в пространстве имен Microsoft.Graphics.Canvas.Effects в Win2D. Эффекты, не поддерживаемые в композиции, отмечаются как [NoComposition].
Эффекты цепочки
Эффекты могут быть связаны, позволяя приложению одновременно использовать несколько эффектов на изображении. Графы эффектов могут поддерживать несколько эффектов, которые могут ссылаться на один и другой. При описании эффекта просто добавьте эффект в качестве входных данных в ваш эффект.
IGraphicsEffect graphicsEffect =
new Microsoft.Graphics.Canvas.Effects.ArithmeticCompositeEffect
{
Source1 = new CompositionEffectSourceParameter("source1"),
Source2 = new SaturationEffect
{
Saturation = 0,
Source = new CompositionEffectSourceParameter("source2")
},
MultiplyAmount = 0,
Source1Amount = 0.5f,
Source2Amount = 0.5f,
Offset = 0
}
В приведенном выше примере описывается арифметический составной эффект, имеющий два входных данных. Второй вход имеет эффект насыщенности с уровнем насыщенности 0,5.
Поддержка анимации
Свойства эффектов поддерживают анимацию, во время компиляции эффектов можно указать анимированные свойства эффекта, и которые могут быть "запечены" как константы. Анимируемые свойства указываются с помощью строк вида "effect name.property name". Эти свойства могут быть анимированы независимо в нескольких экземплярах эффекта.
Константы и анимированные свойства эффектов
Во время компиляции эффектов можно указать свойства эффекта как динамические или как свойства, которые "запечены" в виде констант. Динамические свойства задаются в строках формы "<имя> эффекта".<имя> свойства". Динамические свойства можно задать определенное значение или анимировать с помощью системы анимации композиции.
При компиляции описания эффекта, упомянутого выше, у вас есть гибкость задать насыщенность, равную 0,5, сделать её динамической, настроив её динамически, или анимировать насыщенность.
Компиляция эффекта с насыщенностью, встроенной:
var effectFactory = _compositor.CreateEffectFactory(graphicsEffect);
Компиляция эффекта с динамической насыщенностью:
var effectFactory = _compositor.CreateEffectFactory(graphicsEffect, new[]{"SaturationEffect.Saturation"});
_catEffect = effectFactory.CreateBrush();
_catEffect.SetSourceParameter("mySource", surfaceBrush);
_catEffect.Properties.InsertScalar("saturationEffect.Saturation", 0f);
Затем свойству насыщенности приведенного выше эффекта можно задать статическое значение или анимацию с помощью анимаций Expression или ScalarKeyFrame.
Вы можете создать ключевую структуру (ScalarKeyFrame), которая будет использоваться для анимации свойства насыщенности эффекта следующим образом:
ScalarKeyFrameAnimation effectAnimation = _compositor.CreateScalarKeyFrameAnimation();
effectAnimation.InsertKeyFrame(0f, 0f);
effectAnimation.InsertKeyFrame(0.50f, 1f);
effectAnimation.InsertKeyFrame(1.0f, 0f);
effectAnimation.Duration = TimeSpan.FromMilliseconds(2500);
effectAnimation.IterationBehavior = AnimationIterationBehavior.Forever;
Запустите анимацию свойства насыщенности эффекта следующим образом:
catEffect.Properties.StartAnimation("saturationEffect.Saturation", effectAnimation);
Несколько экземпляров эффектов с независимыми свойствами
Указав, что параметр должен быть динамическим во время компиляции эффектов, параметр можно изменить на основе экземпляра каждого эффекта. Это позволяет двум визуальным элементам использовать один и тот же эффект, но отображаться с разными свойствами эффекта.
Начало работы с эффектами композиции
В этом кратком руководстве показано, как использовать некоторые основные возможности эффектов.
- Установка Visual Studio
- Создание проекта
- Установка Win2D
- Настройка основных компонентов композиции
- Создание кисти CompositionSurface
- Создание, компиляция и применение эффектов
Установка Visual Studio
- Если у вас нет поддерживаемой версии Visual Studio, перейдите на страницу "Скачивание Visual Studio".
Создание проекта
- Перейдите к файлу>нового>проекта.
- Выберите шаблон "Пустое приложение, упакованное (WinUI 3 в Desktop)" или "Пустое приложение, распакованное (WinUI 3 в Desktop)", если это лучше соответствует вашей модели приложения.
- Введите название проекта по вашему выбору.
- Нажмите кнопку Создать.
Установка Win2D
Win2D выпускается как пакет NuGet.org и должен быть установлен, прежде чем использовать эти эффекты в проекте WinUI.
- Запустите диспетчер пакетов NuGet, открыв > и затем Диспетчер пакетов NuGet, далее выберите >.
- Найдите Win2D.WinUI и установите этот пакет для проекта.
- Примите лицензионное соглашение.
- Нажмите кнопку Закрыть.
В следующих нескольких шагах мы будем использовать API композиции для применения эффекта насыщенности к этому изображению кота, который приведет к удалению всех насыщенности. В этой модели создается эффект, а затем применяется к изображению.
Настройка основных компонентов композиции
_compositor = ElementCompositionPreview.GetElementVisual(MyHost).Compositor;
_root = _compositor.CreateContainerVisual();
ElementCompositionPreview.SetElementChildVisual(MyHost, _root);
Создание кисти для CompositionSurface
CompositionSurfaceBrush surfaceBrush = _compositor.CreateSurfaceBrush();
LoadedImageSurface imageSurface = LoadedImageSurface.StartLoadFromUri(new Uri("ms-appx:///Assets/cat.png"));
surfaceBrush.Surface = imageSurface;
Создание, компиляция и применение эффектов
Создайте графический эффект.
var graphicsEffect = new SaturationEffect { Saturation = 0.0f, Source = new CompositionEffectSourceParameter("mySource") };Скомпилируйте эффект и создайте кисть эффекта.
var effectFactory = _compositor.CreateEffectFactory(graphicsEffect); var catEffect = effectFactory.CreateBrush(); catEffect.SetSourceParameter("mySource", surfaceBrush);Создайте SpriteVisual в дереве композиции и примените эффект.
var catVisual = _compositor.CreateSpriteVisual(); catVisual.Brush = catEffect; catVisual.Size = new Vector2(219, 300); _root.Children.InsertAtBottom(catVisual);Запустите приложение. Результаты должны быть денасыщенными котами:
Дополнительная информация
Windows developer