public static Brush CreateImageParticle(Color color, Uri source, int renderSize) { BitmapImage bi = new BitmapImage(); bi.BeginInit(); bi.UriSource = source; bi.EndInit(); AlphaMaskEffect effect = new AlphaMaskEffect(); effect.Color = color; RenderTargetBitmap rtb = PrepareRenderTarget(renderSize); System.Windows.Shapes.Rectangle visual = new System.Windows.Shapes.Rectangle(); visual.Fill = new ImageBrush(bi); visual.Effect = effect; Size sz = new Size(renderSize, renderSize); visual.Measure(sz); visual.Arrange(new Rect(sz)); rtb.Render(visual); return(new ImageBrush(rtb)); }
public void ProcessFrame(ProcessVideoFrameContext context) { bool skipMaskPred = false; if (context.InputFrame.IsDiscontinuous) { streamStartDelta = TimeSpan.FromTicks(DateTime.Now.Ticks) - context.InputFrame.SystemRelativeTime.Value; } else { if ((TimeSpan.FromTicks(DateTime.Now.Ticks) - context.InputFrame.SystemRelativeTime.Value - streamStartDelta) > TimeSpan.FromMilliseconds(maxDelay)) { skipMaskPred = true; } } if (!skipMaskPred) { frameCount++; features["0"] = context.InputFrame; var resTask = _learningModel.EvaluateFeaturesAsync(features, string.Empty).AsTask(); var startTime = DateTime.Now.Ticks; resTask.Wait(); Debug.WriteLine("delta {0}", TimeSpan.FromTicks(DateTime.Now.Ticks - startTime)); } using (CanvasBitmap inputBitmap = CanvasBitmap.CreateFromDirect3D11Surface(canvasDevice, context.InputFrame.Direct3DSurface)) using (CanvasBitmap inputMask = CanvasBitmap.CreateFromDirect3D11Surface(canvasDevice, output.Direct3DSurface)) using (CanvasRenderTarget renderTarget = CanvasRenderTarget.CreateFromDirect3D11Surface(canvasDevice, context.OutputFrame.Direct3DSurface)) using (CanvasDrawingSession ds = renderTarget.CreateDrawingSession()) { ds.Clear(Colors.Green); var addAlpha = new ColorMatrixEffect() { Source = inputMask, ColorMatrix = RToAlpha }; var resize = new ScaleEffect() { Source = addAlpha, Scale = new Vector2(((float)inputBitmap.SizeInPixels.Width / inputMask.SizeInPixels.Width), ((float)inputBitmap.SizeInPixels.Height / inputMask.SizeInPixels.Height)) }; var blend = new AlphaMaskEffect() { Source = inputBitmap, AlphaMask = resize }; ds.DrawImage(blend); ds.DrawText(String.Format("FPS: {0:f1}", currentFPS), fpsLabelOffset, fpsLabelColor); } }
private static async Task CropImageWithShapeAsync(WriteableBitmap writeableBitmap, IRandomAccessStream stream, Rect croppedRect, BitmapFileFormat bitmapFileFormat, CropShape cropShape) { var device = CanvasDevice.GetSharedDevice(); var clipGeometry = CreateClipGeometry(device, cropShape, new Size(croppedRect.Width, croppedRect.Height)); if (clipGeometry == null) { return; } CanvasBitmap sourceBitmap = null; using (var randomAccessStream = new InMemoryRandomAccessStream()) { await CropImageAsync(writeableBitmap, randomAccessStream, croppedRect, bitmapFileFormat); sourceBitmap = await CanvasBitmap.LoadAsync(device, randomAccessStream); } using (var offScreen = new CanvasRenderTarget(device, (float)croppedRect.Width, (float)croppedRect.Height, 96f)) { using (var drawingSession = offScreen.CreateDrawingSession()) using (var markCommandList = new CanvasCommandList(device)) { using (var markDrawingSession = markCommandList.CreateDrawingSession()) { markDrawingSession.FillGeometry(clipGeometry, Colors.Black); } var alphaMaskEffect = new AlphaMaskEffect { Source = sourceBitmap, AlphaMask = markCommandList }; drawingSession.DrawImage(alphaMaskEffect); alphaMaskEffect.Dispose(); } clipGeometry.Dispose(); sourceBitmap.Dispose(); var pixelBytes = offScreen.GetPixelBytes(); var bitmapEncoder = await BitmapEncoder.CreateAsync(GetEncoderId(bitmapFileFormat), stream); bitmapEncoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied, offScreen.SizeInPixels.Width, offScreen.SizeInPixels.Height, 96.0, 96.0, pixelBytes); await bitmapEncoder.FlushAsync(); } }
private (CompositionBrush, CompositionSurfaceBrush) CreateMaskedBrush(CompositionBrush source) { var compositor = Window.Current.Compositor; var effect = new AlphaMaskEffect() { Source = new CompositionEffectSourceParameter("Source"), AlphaMask = new CompositionEffectSourceParameter("Mask"), }; var opacityMaskSurface = LoadedImageSurface.StartLoadFromUri(new Uri("ms-appx:///Assets/Images/mask.Png")); var opacityBrush = Compositor.CreateSurfaceBrush(opacityMaskSurface); opacityBrush.Stretch = CompositionStretch.UniformToFill; var effectFactory = compositor.CreateEffectFactory(effect); var compositionBrush = effectFactory.CreateBrush(); compositionBrush.SetSourceParameter("Source", source); compositionBrush.SetSourceParameter("Mask", opacityBrush); return(compositionBrush, opacityBrush); }
private ICanvasImage CreateAlphaMask() { if (!AlphaMaskEffect.IsSupported) { return CreateNotSupportedMessage(requiresWin10_14393); } textLabel = requiresWin10_14393; // Draw an alpha gradient into a command list. var alphaGradientBrush = new CanvasRadialGradientBrush(canvas, Colors.Black, Colors.Transparent) { Center = bitmapTiger.Size.ToVector2() / 2, RadiusX = (float)bitmapTiger.Size.Width, RadiusY = (float)bitmapTiger.Size.Height }; var alphaMask = new CanvasCommandList(canvas); using (var drawingSession = alphaMask.CreateDrawingSession()) { drawingSession.FillRectangle(bitmapTiger.Bounds, alphaGradientBrush); } // Apply the alpha mask to the tiger bitmap. var alphaMaskEffect = new AlphaMaskEffect { Source = bitmapTiger, AlphaMask = alphaMask }; // Composite the alpha masked image on top of a background checker pattern. var compositeEffect = new CompositeEffect { Sources = { CreateCheckeredBackground(), alphaMaskEffect } }; animationFunction = elapsedTime => { }; return compositeEffect; }
void UpdateShadowEffect() //This calls UpdateShadowVisualProperties, UpdateShadowMask and UpdateShadowSizeAndOffset. { if (compositor == null || shadowVisual == null) { return; } if (ShouldUseMask) { isUsingDropShadow = false; if (shadowVisual.Shadow != null) { var oldShadow = shadowVisual.Shadow; shadowVisual.Shadow = null; oldShadow.Dispose(); } IGraphicsEffectSource alphaMaskSource = new Transform2DEffect() { Name = transformEffectName, TransformMatrix = Matrix3x2.Identity, Source = new CompositionEffectSourceParameter(effectSourceName) }; if (SpreadRadius > 0) { var spreadEffectBlur = new GaussianBlurEffect() { BlurAmount = (float)SpreadRadius / 3.0f, Source = alphaMaskSource }; alphaMaskSource = new ColorMatrixEffect() { ClampOutput = true, ColorMatrix = new Matrix5x4() { M44 = 10.0f }, Source = spreadEffectBlur }; //The number 10 seems about right } if (BlurRadius > 0) { alphaMaskSource = new GaussianBlurEffect() { BlurAmount = (float)BlurRadius / 3.0f, Source = alphaMaskSource }; } var colorSourceEffect = new ColorSourceEffect() { Color = Color }; var finalEffect = new AlphaMaskEffect { AlphaMask = alphaMaskSource, Source = colorSourceEffect }; CompositionEffectFactory effectFactory; try { effectFactory = compositor.CreateEffectFactory(finalEffect, new string[] { transformEffectMatrixName }); } catch (Exception) { return; } var shadowEffectBrush = effectFactory.CreateBrush(); var oldBrush = shadowVisual.Brush; shadowVisual.Brush = shadowEffectBrush; oldBrush?.Dispose(); UpdateShadowMask(); } else { isUsingDropShadow = true; if (shadowVisual.Brush != null) { var oldBrush = shadowVisual.Brush; shadowVisual.Brush = null; oldBrush.Dispose(); } var dropShadow = shadowVisual.Shadow as DropShadow; if (dropShadow == null) { dropShadow = compositor.CreateDropShadow(); var oldShadow = shadowVisual.Shadow; shadowVisual.Shadow = dropShadow; oldShadow?.Dispose(); } dropShadow.BlurRadius = (float)Math.Max(BlurRadius, 0.0); dropShadow.Color = Color; } UpdateShadowVisualProperties(); UpdateShadowSizeAndOffset(); }