private void OnLoaded(object sender, RoutedEventArgs e) { _compositor = ElementCompositionPreview.GetElementVisual(this).Compositor; _generator = _compositor.CreateCompositionGenerator(); _backdropBrush = _compositor.CreateBackdropBrush(); _width = 300f; _height = 300f; _center = new Vector2(150f); // Create the combined geometry _ellipse1 = CanvasGeometry.CreateEllipse(_generator.Device, _width / 2, _height / 2, 0.45f * _width, 0.225f * _height); _ellipse2 = CanvasGeometry.CreateEllipse(_generator.Device, _width / 2, _height / 2, 0.225f * _width, 0.45f * _height); var combinedGeometry = _ellipse1.CombineWith(_ellipse2, Matrix3x2.Identity, CanvasGeometryCombine.Union); _outerGeometry = CanvasObject.CreateSquircle(_generator.Device, 0, 0, _width, _height, _width, _height); var excludedGeometry = _outerGeometry.CombineWith(combinedGeometry, Matrix3x2.Identity, CanvasGeometryCombine.Exclude); // Create custom shaped visual using CompositionMaskBrush _visual1 = _compositor.CreateSpriteVisual(); _visual1.Size = new Vector2(_width, _height); _visual1.Offset = new Vector3(((RenderGrid1.ActualWidth - _width) / 2).ToSingle(), ((RenderGrid1.ActualHeight - _height) / 2).ToSingle(), 0); _animatedMaskSurface = _generator.CreateMaskSurface(_visual1.Size.ToSize(), excludedGeometry); // Create SurfaceBrush from CompositionMask var mask = _compositor.CreateSurfaceBrush(_animatedMaskSurface); var source = _compositor.CreateColorBrush(Color.FromArgb(255, 192, 0, 0)); // Create mask brush var maskBrush = _compositor.CreateMaskBrush(); maskBrush.Mask = mask; maskBrush.Source = source; _visual1.Brush = maskBrush; ElementCompositionPreview.SetElementChildVisual(RenderGrid1, _visual1); // Create custom shaped visual using CompositionMaskBrush _visual2 = _compositor.CreateSpriteVisual(); _visual2.Size = new Vector2(_width, _height); _visual2.Brush = _compositor.CreateMaskedBackdropBrush(_animatedMaskSurface, Colors.AntiqueWhite, 10, _backdropBrush); _container = _compositor.CreateContainerVisual(); _container.Size = new Vector2(_width, _height); _container.Offset = new Vector3(((RenderGrid2.ActualWidth - _width) / 2).ToSingle(), ((RenderGrid2.ActualHeight - _height) / 2).ToSingle(), 0); var bgVisual = _compositor.CreateSpriteVisual(); bgVisual.Size = _container.Size * 0.6f; bgVisual.Brush = _compositor.CreateColorBrush(Colors.Maroon); bgVisual.Offset = new Vector3(_container.Size * 0.2f, 0); _container.Children.InsertAtTop(bgVisual); _container.Children.InsertAtTop(_visual2); ElementCompositionPreview.SetElementChildVisual(RenderGrid2, _container); }
/// <summary> /// Creates a custom shaped Effect Brush using BackdropBrush and a Mask /// </summary> /// <param name="compositor">Compositor</param> /// <param name="mask">IMaskSurface</param> /// <param name="blendColor">Color to blend in the BackdropBrush</param> /// <param name="blurAmount">Blur Amount of the Backdrop Brush</param> /// <param name="backdropBrush">Backdrop Brush (optional). If not provided, then compositor creates it.</param> /// <returns>CompositionEffectBrush</returns> public static CompositionEffectBrush CreateMaskedBackdropBrush(this Compositor compositor, IMaskSurface mask, Color blendColor, float blurAmount, CompositionBackdropBrush backdropBrush = null) { // Blur Effect var blurEffect = new GaussianBlurEffect() { Name = "Blur", BlurAmount = blurAmount, BorderMode = EffectBorderMode.Hard, Optimization = EffectOptimization.Balanced, Source = new CompositionEffectSourceParameter("backdrop"), }; // Blend Effect var blendEffect = new BlendEffect { Foreground = new ColorSourceEffect { Name = "Color", Color = blendColor }, Background = blurEffect, Mode = BlendEffectMode.Multiply }; // Composite Effect var effect = new CompositeEffect { Mode = CanvasComposite.DestinationIn, Sources = { blendEffect, new CompositionEffectSourceParameter("mask") } }; // Create Effect Factory var factory = compositor.CreateEffectFactory(effect, new[] { "Blur.BlurAmount", "Color.Color" }); // Create Effect Brush var brush = factory.CreateBrush(); // Set the BackDropBrush // If no backdrop brush is provided, create one brush.SetSourceParameter("backdrop", backdropBrush ?? compositor.CreateBackdropBrush()); // Set the Mask // Create SurfaceBrush from IMaskSurface var maskBrush = compositor.CreateSurfaceBrush(mask.Surface); brush.SetSourceParameter("mask", maskBrush); return(brush); }
/// <summary> /// Creates a custom shaped Frosted Glass Effect Brush using BackdropBrush and a Mask /// </summary> /// <param name="compositor">Compositor</param> /// <param name="mask">IMaskSurface</param> /// <param name="blendColor">Color to blend in the BackdropBrush</param> /// <param name="blurAmount">Blur Amount of the Backdrop Brush</param> /// <param name="backdropBrush">Backdrop Brush (optional). If not provided, then compositor creates it.</param> /// <param name="multiplyAmount">MultiplyAmount of the ArithmeticCompositeEffect</param> /// <param name="colorAmount">Source1Amount of the ArithmeticCompositeEffect</param> /// <param name="backdropAmount">Source2Amount of the ArithmeticCompositeEffect</param> /// <returns>CompositionEffectBrush</returns> public static CompositionEffectBrush CreateFrostedGlassBrush(this Compositor compositor, IMaskSurface mask, Color blendColor, float blurAmount, CompositionBackdropBrush backdropBrush = null, float multiplyAmount = 0, float colorAmount = 0.5f, float backdropAmount = 0.5f) { // Create a frosty glass effect var frostEffect = new GaussianBlurEffect { Name = "Blur", BlurAmount = blurAmount, BorderMode = EffectBorderMode.Hard, Source = new ArithmeticCompositeEffect { Name = "Source", MultiplyAmount = multiplyAmount, Source1Amount = backdropAmount, Source2Amount = colorAmount, Source1 = new CompositionEffectSourceParameter("backdrop"), Source2 = new ColorSourceEffect { Name = "BlendColor", Color = blendColor } } }; // Composite Effect var effect = new CompositeEffect { Mode = CanvasComposite.DestinationIn, Sources = { frostEffect, new CompositionEffectSourceParameter("mask") } }; // Create Effect Factory var factory = compositor.CreateEffectFactory(effect, new[] { "Blur.BlurAmount", "BlendColor.Color" }); // Create Effect Brush var brush = factory.CreateBrush(); // Set the BackDropBrush // If no backdrop brush is provided, create one brush.SetSourceParameter("backdrop", backdropBrush ?? compositor.CreateBackdropBrush()); // Set the Mask // Create SurfaceBrush from CompositionMask var maskBrush = compositor.CreateSurfaceBrush(mask.Surface); brush.SetSourceParameter("mask", maskBrush); return(brush); }
private void OnLoaded(object sender, RoutedEventArgs e) { _compositor = ElementCompositionPreview.GetElementVisual(this).Compositor; _generator = _compositor.CreateCompositionGenerator(); _backdropBrush = _compositor.CreateBackdropBrush(); _width = 300f; _height = 300f; // Create the combined geometry var ellipse1 = CanvasGeometry.CreateEllipse(_generator.Device, _width / 2, _height / 2, 0.45f * _width, 0.225f * _height); var ellipse2 = CanvasGeometry.CreateEllipse(_generator.Device, _width / 2, _height / 2, 0.225f * _width, 0.45f * _height); _combinedGeometry = ellipse1.CombineWith(ellipse2, Matrix3x2.Identity, CanvasGeometryCombine.Union); // Create the container to host the visuals var container1 = _compositor.CreateContainerVisual(); container1.Size = new Vector2(CompositionGrid1.ActualWidth.ToSingle(), CompositionGrid1.ActualHeight.ToSingle()); var parentVisual = _compositor.CreateSpriteVisual(); parentVisual.Size = new Vector2(_width, _height); parentVisual.Offset = new Vector3(((CompositionGrid1.ActualWidth - _width) / 2).ToSingle(), ((CompositionGrid1.ActualHeight - _height) / 2).ToSingle(), 0); // Background Visual _bgVisual1 = _compositor.CreateSpriteVisual(); _bgVisual1.Size = new Vector2(_width * 0.5f, _height * 0.5f); _bgVisual1.Offset = new Vector3(((parentVisual.Size.X - _width * 0.5f) / 2f), ((parentVisual.Size.Y - _height * 0.5f) / 2f), 0f); //_bgVisual1.Brush = _compositor.CreateColorBrush(Colors.DarkOrange); // Create the CompositionMask var gaussianMask = _generator.CreateGaussianMaskSurface(); // Create SurfaceBrush from CompositionMask var mask = _compositor.CreateSurfaceBrush(gaussianMask.Surface); //mask = ((CompositionBrush)_compositor.CreateGaussianMaskedBackdropBrush(gaussianMask, Colors.AntiqueWhite, 10, _backdropBrush)); var source = _compositor.CreateColorBrush(Colors.DarkOrange); // Create mask brush var maskBrush = _compositor.CreateMaskBrush(); maskBrush.Mask = mask; maskBrush.Source = source; _bgVisual1.Brush = maskBrush; parentVisual.Children.InsertAtBottom(_bgVisual1); // Create custom shaped visual using CompositionMaskBrush _visual1 = _compositor.CreateSpriteVisual(); _visual1.Size = new Vector2(_width, _height); //_visual1.Offset = new Vector3(((CompositionGrid1.ActualWidth - _width) / 2).ToSingle(), // ((CompositionGrid1.ActualHeight - _height) / 2).ToSingle(), 0); // Create the CompositionMask var ellipseGeometry = CanvasGeometry.CreateEllipse(_generator.Device, _width / 2, _height / 2, 0.4f * _width, 0.4f * _height); var rectGeometry = CanvasGeometry.CreateRectangle(_generator.Device, 50, 50, _width - 50, _height - 50); var compositionMask = _generator.CreateGaussianMaskSurface(_visual1.Size.ToSize(), ellipseGeometry, new Vector2(20), 20); // Create Masked BackdropBrush from CompositionMask _visual1.Brush = _compositor.CreateGaussianMaskedBackdropBrush(compositionMask, Colors.Transparent, 20f, _backdropBrush); parentVisual.Children.InsertAtTop(_visual1); var visual = _compositor.CreateSpriteVisual(); visual.Size = new Vector2(400, 400); visual.Offset = new Vector3(((3 * CompositionGrid1.ActualWidth / 4f) - (_width / 2)).ToSingle(), ((3 * CompositionGrid1.ActualHeight / 4f) - (_height / 2)).ToSingle(), 0); var roundRectGeometry = CanvasObject.CreateSquircle(_generator.Device, 0, 0, _width, _height, _width / 8f, _height / 8f); var maskSurface = _generator.CreateMaskSurface(visual.Size.ToSize(), roundRectGeometry); var frostedBrush = _compositor.CreateFrostedGlassBrush(maskSurface, Colors.DarkGray, 30f, _backdropBrush); var shadow = _compositor.CreateDropShadow(); shadow.Opacity = 0.5f; shadow.Color = Colors.Black; shadow.Offset = new Vector3(10, 10, 0); shadow.BlurRadius = 15; shadow.Mask = frostedBrush.GetSourceParameter("mask"); visual.Brush = frostedBrush; visual.Shadow = shadow; container1.Children.InsertAtTop(visual); ElementCompositionPreview.SetElementChildVisual(CompositionGrid1, parentVisual); // Initialize the visuals for the Animated Canvas // Create the container to host the visuals var container2 = _compositor.CreateContainerVisual(); container2.Size = new Vector2(CompositionGrid2.ActualWidth.ToSingle(), CompositionGrid2.ActualHeight.ToSingle()); // Background Visual _bgVisual2 = _compositor.CreateSpriteVisual(); _bgVisual2.Size = new Vector2(_width * Factor, _height * Factor); _bgVisual2.Offset = new Vector3(((CompositionGrid2.ActualWidth - (_width * Factor)) / 2).ToSingle(), ((CompositionGrid2.ActualHeight - (_height * Factor)) / 2).ToSingle(), 0); //var radians = ((45f * Math.PI) / 180).ToSingle(); //var bgGeometry = _combinedGeometry.Transform(Matrix3x2.CreateRotation(radians, new Vector2(_width / 2, _height / 2))); //var bgMask = await _generator.CreateMaskAsync(_bgVisual2.Size.ToSize(), bgGeometry, Colors.DarkRed); //_bgVisual2.Brush = _compositor.CreateSurfaceBrush(bgMask.Surface); _bgVisual2.Brush = _compositor.CreateColorBrush(Colors.LawnGreen); container2.Children.InsertAtBottom(_bgVisual2); // Animated Visual _animatedVisual = _compositor.CreateSpriteVisual(); _animatedVisual.Size = new Vector2(_width, _height); _animatedVisual.Offset = new Vector3(((CompositionGrid2.ActualWidth - _width) / 2).ToSingle(), ((CompositionGrid2.ActualHeight - _height) / 2).ToSingle(), 0); // Create the Excluded geometry _outerGeometry = CanvasObject.CreateSquircle(_generator.Device, 0, 0, _width, _height, _width / 8f, _height / 8f); var excludedGeometry = _outerGeometry.CombineWith(_combinedGeometry, Matrix3x2.Identity, CanvasGeometryCombine.Exclude); // Create the CompositionMask _animatedCompositionMask = _generator.CreateMaskSurface(_animatedVisual.Size.ToSize(), excludedGeometry); var animBrush = _compositor.CreateMaskedBackdropBrush(_animatedCompositionMask, Colors.AntiqueWhite, 10f, _backdropBrush); _animatedVisual.Brush = animBrush; container2.Children.InsertAtTop(_animatedVisual); ElementCompositionPreview.SetElementChildVisual(CompositionGrid2, container2); }
/// <summary> /// Initializes the Composition elements /// </summary> private void InitComposition() { // Compositor _compositor = ElementCompositionPreview.GetElementVisual(this).Compositor; // CompositionGenerator _generator = CompositionGeneratorFactory.GetCompositionGenerator(_compositor); // Fade Out Animation _fadeOutAnimation = _compositor.CreateScalarKeyFrameAnimation(); _fadeOutAnimation.InsertKeyFrame(1f, 0); _fadeOutAnimation.Duration = TransitionDuration; // Fade In Animation _fadeInAnimation = _compositor.CreateScalarKeyFrameAnimation(); _fadeInAnimation.InsertKeyFrame(1f, 1); _fadeInAnimation.Duration = TransitionDuration; // Color Animation _colorAnimation = _compositor.CreateColorKeyFrameAnimation(); _colorAnimation.Duration = TransitionDuration; // Offset Animation _offsetAnimation = _compositor.CreateVector3KeyFrameAnimation(); _offsetAnimation.Target = "Offset"; _offsetAnimation.Duration = TransitionDuration; _offsetAnimation.InsertKeyFrame(1f, Vector3.Zero); // Alignment animations _alignXAnimation = _compositor.CreateScalarKeyFrameAnimation(); _alignXAnimation.Duration = AlignmentTransitionDuration; _alignYAnimation = _compositor.CreateScalarKeyFrameAnimation(); _alignYAnimation.Duration = AlignmentTransitionDuration; // ZoomIn Animation Group _scaleAnimation = _compositor.CreateVector3KeyFrameAnimation(); _scaleAnimation.Target = "Scale"; _scaleAnimation.InsertKeyFrame(1f, Vector3.One); _scaleAnimation.Duration = TransitionDuration; _zoomInAnimationGroup = _compositor.CreateAnimationGroup(); _zoomInAnimationGroup.Add(_scaleAnimation); _zoomInAnimationGroup.Add(_offsetAnimation); // Visuals _rootContainer = _compositor.CreateContainerVisual(); _frameLayer = _compositor.CreateLayerVisual(); _frameBackgroundVisual = _compositor.CreateSpriteVisual(); _frameContentVisual = _compositor.CreateSpriteVisual(); _placeholderContentVisual = _compositor.CreateSpriteVisual(); _placeholderBackgroundVisual = _compositor.CreateSpriteVisual(); _nextVisualContent = _compositor.CreateSpriteVisual(); _frameLayer.Children.InsertAtTop(_frameBackgroundVisual); _frameLayer.Children.InsertAtTop(_frameContentVisual); _frameLayer.Children.InsertAtTop(_placeholderBackgroundVisual); _frameLayer.Children.InsertAtTop(_placeholderContentVisual); _frameLayer.Children.InsertAtTop(_nextVisualContent); // Placeholder content _placeholderContentMask = _generator.CreateGeometrySurface(PlaceholderSize, GetPlaceHolderGeometry(), PlaceholderColor, PlaceholderBackground); _placeholderContentBrush = _compositor.CreateSurfaceBrush(_placeholderContentMask.Surface); _placeholderContentVisual.Brush = _placeholderContentBrush; // Placeholder background _placeholderBackgroundVisual.Brush = _compositor.CreateColorBrush(PlaceholderBackground); // By default placeholder visual will not be visible HidePlaceholder(); // Shadow visual _shadowVisual = _compositor.CreateSpriteVisual(); _rootContainer.Children.InsertAtBottom(_shadowVisual); _rootContainer.Children.InsertAtTop(_frameLayer); _frameBackgroundVisual.Brush = _compositor.CreateColorBrush(FrameBackground); // Create the effect to create the opacity mask var layerEffect = new CompositeEffect { // CanvasComposite.DestinationIn - Intersection of source and mask. // Equation: O = MA * S // where O - Output pixel, MA - Mask Alpha, S - Source pixel. Mode = CanvasComposite.DestinationIn, Sources = { new CompositionEffectSourceParameter("source"), new CompositionEffectSourceParameter("mask") } }; var layerEffectFactory = _compositor.CreateEffectFactory(layerEffect); _layerEffectBrush = layerEffectFactory.CreateBrush(); // The mask for the imageFrame _frameLayerMask = _generator.CreateMaskSurface(new Size(0, 0), null); _layerEffectBrush.SetSourceParameter("mask", _compositor.CreateSurfaceBrush(_frameLayerMask.Surface)); // Apply the mask effect to the frameLayer _frameLayer.Effect = _layerEffectBrush; ElementCompositionPreview.SetElementChildVisual(this, _rootContainer); }
/// <summary> /// Disposes the resources /// </summary> public void Dispose() { // Clean up resources _compositor = null; Source = null; DataContext = null; Foreground = null; Background = null; _scheduledObject = null; _currentObject = null; // Clean up Composition Objects _imageSurface?.Dispose(); _imageSurface = null; _nextImageSurface?.Dispose(); _nextImageSurface = null; _frameLayerMask?.Dispose(); _frameLayerMask = null; _placeholderContentMask?.Dispose(); _placeholderContentMask = null; _placeholderContentBrush?.Dispose(); _placeholderContentBrush = null; _nextSurfaceBrush?.Dispose(); _nextSurfaceBrush = null; _rootContainer?.Dispose(); _rootContainer = null; _shadowVisual?.Dispose(); _shadowVisual = null; _frameLayer?.Dispose(); _frameLayer = null; _frameBackgroundVisual?.Dispose(); _frameBackgroundVisual = null; _placeholderBackgroundVisual?.Dispose(); _placeholderBackgroundVisual = null; _placeholderContentVisual?.Dispose(); _placeholderContentVisual = null; _frameContentVisual?.Dispose(); _frameContentVisual = null; _nextVisualContent?.Dispose(); _nextVisualContent = null; _shadow?.Dispose(); _shadow = null; _layerEffectBrush?.Dispose(); _layerEffectBrush = null; _imageOptions = null; _zoomInAnimationGroup?.Dispose(); _zoomInAnimationGroup = null; _fadeOutAnimation?.Dispose(); _fadeOutAnimation = null; _fadeInAnimation?.Dispose(); _fadeInAnimation = null; _colorAnimation?.Dispose(); _colorAnimation = null; _alignXAnimation?.Dispose(); _alignXAnimation = null; _alignYAnimation?.Dispose(); _alignYAnimation = null; _offsetAnimation?.Dispose(); _offsetAnimation = null; _scaleAnimation?.Dispose(); _scaleAnimation = null; // Dispose the generator at the end to allow the // dependant composition objects to unsubscribe from // generator events _generator?.Dispose(); _generator = null; }
private async void OnLoaded(object sender, RoutedEventArgs e) { _compositor = ElementCompositionPreview.GetElementVisual(this).Compositor; _generator = CompositionGeneratorFactory.GetCompositionGenerator(_compositor); _backdropBrush = _compositor.CreateBackdropBrush(); _width = 300f; _height = 300f; // Create the combined geometry var ellipse1 = CanvasGeometry.CreateEllipse(_generator.Device, _width / 2, _height / 2, 0.45f * _width, 0.225f * _height); var ellipse2 = CanvasGeometry.CreateEllipse(_generator.Device, _width / 2, _height / 2, 0.225f * _width, 0.45f * _height); _combinedGeometry = ellipse1.CombineWith(ellipse2, Matrix3x2.Identity, CanvasGeometryCombine.Union); // Create the container to host the visuals var container1 = _compositor.CreateContainerVisual(); container1.Size = new Vector2(CompositionGrid1.ActualWidth.Single(), CompositionGrid1.ActualHeight.Single()); // Background Visual _bgVisual1 = _compositor.CreateSpriteVisual(); _bgVisual1.Size = new Vector2(_width * 0.45f, _height * 0.45f); _bgVisual1.Offset = new Vector3(((CompositionGrid1.ActualWidth - _width) / 2).Single(), ((CompositionGrid1.ActualHeight - _height) / 2).Single(), 0); _bgVisual1.Brush = _compositor.CreateColorBrush(Colors.DarkOrange); container1.Children.InsertAtBottom(_bgVisual1); // Create custom shaped visual using CompositionMaskBrush _visual1 = _compositor.CreateSpriteVisual(); _visual1.Size = new Vector2(_width, _height); _visual1.Offset = new Vector3(((CompositionGrid1.ActualWidth - _width) / 2).Single(), ((CompositionGrid1.ActualHeight - _height) / 2).Single(), 0); // Create the CompositionMask var ellipseGeometry = CanvasGeometry.CreateEllipse(_generator.Device, _width / 2, _height / 2, 0.4f * _width, 0.4f * _height); var compositionMask = _generator.CreateMaskSurface(_visual1.Size.ToSize(), ellipseGeometry); // Create Masked BackdropBrush from CompositionMask _visual1.Brush = _compositor.CreateMaskedBackdropBrush(compositionMask, Colors.AntiqueWhite, 30f, _backdropBrush); container1.Children.InsertAtTop(_visual1); var visual = _compositor.CreateSpriteVisual(); visual.Size = new Vector2(400, 400); visual.Offset = new Vector3(((3 * CompositionGrid1.ActualWidth / 4f) - (_width / 2)).Single(), ((3 * CompositionGrid1.ActualHeight / 4f) - (_height / 2)).Single(), 0); var roundRectGeometry = CanvasGeometry.CreateRoundedRectangle(_generator.Device, 0, 0, _width, _height, 25, 25); var maskSurface = _generator.CreateMaskSurface(visual.Size.ToSize(), roundRectGeometry); var frostedBrush = _compositor.CreateFrostedGlassBrush(maskSurface, Colors.AntiqueWhite, 30f, _backdropBrush); var shadow = _compositor.CreateDropShadow(); shadow.Opacity = 0.5f; shadow.Color = Colors.Black; shadow.Offset = new Vector3(10, 10, 0); shadow.BlurRadius = 15; shadow.Mask = frostedBrush.GetSourceParameter("mask"); visual.Brush = frostedBrush; visual.Shadow = shadow; container1.Children.InsertAtTop(visual); ElementCompositionPreview.SetElementChildVisual(CompositionGrid1, container1); // Initialize the visuals for the Animated Canvas // Create the container to host the visuals var container2 = _compositor.CreateContainerVisual(); container2.Size = new Vector2(CompositionGrid2.ActualWidth.Single(), CompositionGrid2.ActualHeight.Single()); // Background Visual _bgVisual2 = _compositor.CreateSpriteVisual(); _bgVisual2.Size = new Vector2(_width * Factor, _height * Factor); _bgVisual2.Offset = new Vector3(((CompositionGrid2.ActualWidth - (_width * Factor)) / 2).Single(), ((CompositionGrid2.ActualHeight - (_height * Factor)) / 2).Single(), 0); //var radians = ((45f * Math.PI) / 180).Single(); //var bgGeometry = _combinedGeometry.Transform(Matrix3x2.CreateRotation(radians, new Vector2(_width / 2, _height / 2))); //var bgMask = await _generator.CreateMaskAsync(_bgVisual2.Size.ToSize(), bgGeometry, Colors.DarkRed); //_bgVisual2.Brush = _compositor.CreateSurfaceBrush(bgMask.Surface); _bgVisual2.Brush = _compositor.CreateColorBrush(Colors.LawnGreen); container2.Children.InsertAtBottom(_bgVisual2); // Animated Visual _animatedVisual = _compositor.CreateSpriteVisual(); _animatedVisual.Size = new Vector2(_width, _height); _animatedVisual.Offset = new Vector3(((CompositionGrid2.ActualWidth - _width) / 2).Single(), ((CompositionGrid2.ActualHeight - _height) / 2).Single(), 0); // Create the Excluded geometry _outerGeometry = CanvasGeometry.CreateRectangle(_generator.Device, 0, 0, _width, _height); var excludedGeometry = _outerGeometry.CombineWith(_combinedGeometry, Matrix3x2.Identity, CanvasGeometryCombine.Exclude); // Create the CompositionMask _animatedCompositionMask = _generator.CreateMaskSurface(_animatedVisual.Size.ToSize(), excludedGeometry); var animBrush = _compositor.CreateMaskedBackdropBrush(_animatedCompositionMask, Colors.AntiqueWhite, 10f, _backdropBrush); _animatedVisual.Brush = animBrush; container2.Children.InsertAtTop(_animatedVisual); ElementCompositionPreview.SetElementChildVisual(CompositionGrid2, container2); }
/// <summary> /// Creates a custom shaped Effect Brush using BackdropBrush and an IMaskSurface /// </summary> /// <param name="compositor">Compositor</param> /// <param name="mask">IMaskSurface</param> /// <param name="blendColor">Color to blend in the BackdropBrush</param> /// <param name="blurAmount">Blur Amount of the Backdrop Brush</param> /// <param name="backdropBrush">Backdrop Brush (optional). If not provided, then compositor creates it.</param> /// <returns>CompositionEffectBrush</returns> public static CompositionEffectBrush CreateMaskedBackdropBrush(this Compositor compositor, IMaskSurface mask, Color blendColor, float blurAmount, CompositionBackdropBrush backdropBrush = null) { return(CompositionExtensions.CreateBackdropBrush(compositor, mask, blendColor, blurAmount, backdropBrush)); }