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));
        }
示例#2
0
        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);
                        }
        }
示例#3
0
        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);
        }
示例#5
0
        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();
 }