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; }
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; }
private void OnBlurRadiusChanged(object sender, RangeBaseValueChangedEventArgs e) { _blurRadius = BlurSlider.Value.ToSingle(); _imageMaskSurface?.Redraw(ImageSurfaceOptions.GetDefaultImageMaskOptionsForBlur(_blurRadius)); }
/// <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; }
/// <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; }