Пример #1
0
        private void OnLoaded(object sender, RoutedEventArgs e)
        {
            _compositor = Window.Current.Compositor;
            _generator  = _compositor.CreateCompositionGenerator();

            _imageVisual      = _compositor.CreateSpriteVisual();
            _imageVisual.Size = new Vector2(RenderGrid.Width.ToSingle(), RenderGrid.Height.ToSingle());
            _imageOptions     = ImageSurfaceOptions.DefaultOptimized;
            _imageOptions.SurfaceBackgroundColor = Colors.Black;
            _imageSurface      = _generator.CreateImageSurface(null, _imageVisual.Size.ToSize(), _imageOptions);
            _imageVisual.Brush = _compositor.CreateSurfaceBrush(_imageSurface);
            ElementCompositionPreview.SetElementChildVisual(RenderGrid, _imageVisual);

            ImageCB.SelectedIndex   = 0;
            StretchCB.SelectedIndex = 0;
            AlignXCB.SelectedIndex  = 1;
            AlignYCB.SelectedIndex  = 1;
        }
Пример #2
0
        async void Redraw(bool recreateSurface = true)
        {
            if (_compositor == null)
            {
                _compositor = Window.Current.Compositor;
                _generator  = _compositor.CreateCompositionGenerator();

                _defaultSize = new Vector2(GridWidth, GridWidth);
                // Create the original output image visual
                _originalImageVisual      = _compositor.CreateSpriteVisual();
                _originalImageVisual.Size = _defaultSize;
                _imageSurface             = await _generator.CreateImageSurfaceAsync(new Uri("ms-appx:///Assets/Images/cat.png"), _defaultSize.ToSize(), ImageSurfaceOptions.Default);

                _originalImageVisual.Brush = _compositor.CreateSurfaceBrush(_imageSurface);
                ElementCompositionPreview.SetElementChildVisual(OriginalOutputGrid, _originalImageVisual);

                // Create the source image visual
                _sourceImageVisual      = _compositor.CreateSpriteVisual();
                _sourceImageVisual.Size = _defaultSize;
                ElementCompositionPreview.SetElementChildVisual(ImageGrid, _sourceImageVisual);

                //Create the mask visual
                _maskVisual      = _compositor.CreateSpriteVisual();
                _maskVisual.Size = _defaultSize;
                ElementCompositionPreview.SetElementChildVisual(MaskGrid, _maskVisual);

                // Create the output visual
                _outputVisual      = _compositor.CreateSpriteVisual();
                _outputVisual.Size = _defaultSize;
                ElementCompositionPreview.SetElementChildVisual(OutputGrid, _outputVisual);
            }

            var selIndex = ImageList.SelectedIndex;

            if (selIndex == -1)
            {
                return;
            }

            var uri = _images.Values.ElementAt(selIndex);

            if (uri == null)
            {
                return;
            }

            var offset = OffsetSlider.Value.ToSingle();

            var padding = new Thickness(offset);

            if (recreateSurface)
            {
                _sourceImageSurface =
                    await _generator.CreateImageSurfaceAsync(uri, _defaultSize.ToSize(), ImageSurfaceOptions.Default);

                _imageMaskSurface = _generator.CreateImageMaskSurface(_sourceImageSurface, _defaultSize.ToSize(),
                                                                      padding, ImageSurfaceOptions.GetDefaultImageMaskOptionsForBlur(_blurRadius));
            }
            else
            {
                _imageMaskSurface.Resize(_defaultSize.ToSize(), padding, ImageSurfaceOptions.GetDefaultImageMaskOptionsForBlur(_blurRadius));
            }

            _sourceImageVisual.Brush = _compositor.CreateSurfaceBrush(_sourceImageSurface);
            _maskVisual.Brush        = _compositor.CreateSurfaceBrush(_imageMaskSurface);
            var maskedBrush = _compositor.CreateMaskBrush();

            maskedBrush.Source = _originalImageVisual.Brush;
            maskedBrush.Mask   = _compositor.CreateSurfaceBrush(_imageMaskSurface);

            _outputVisual.Brush = maskedBrush;
        }
Пример #3
0
 private void OnBlurRadiusChanged(object sender, RangeBaseValueChangedEventArgs e)
 {
     _blurRadius = BlurSlider.Value.ToSingle();
     _imageMaskSurface?.Redraw(ImageSurfaceOptions.GetDefaultImageMaskOptionsForBlur(_blurRadius));
 }
Пример #4
0
        /// <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;
        }
Пример #5
0
        /// <summary>
        /// Ctor
        /// </summary>
        public ImageFrame()
        {
            // Set the default Style Key
            DefaultStyleKey = typeof(ImageFrame);

            // Setting the background to transparent so that it will
            // receive Pointer events
            Background = new SolidColorBrush(Colors.Transparent);
            // Initialize the ImageOptions
            _imageOptions = ImageSurfaceOptions.Default;
        }