private void CanvasAnimatedControl_OnCreateResources(CanvasAnimatedControl sender, CanvasCreateResourcesEventArgs args) { // blobs _blobs = new List<Blob>(); var rnd = new Random(); for (int i = 0; i < BlobCount; i++) { _blobs.Add(new Blob { Position = new Vector2((float) (rnd.NextDouble()*sender.Size.Width), (float) (rnd.NextDouble()*sender.Size.Height)), Velocity = new Vector2(BlobVelocityScale * (float) ((rnd.NextDouble()*3.0f) - 1.5f), BlobVelocityScale * (float) ((rnd.NextDouble()*3.0f) - 1.5f)) }); } // texture var rgb = new CanvasRadialGradientBrush(sender, new[] { new CanvasGradientStop { Color = Color.FromArgb(255, 128, 128, 255), Position = 0.0f }, new CanvasGradientStop { Color = Color.FromArgb(128, 128, 128, 255), Position = 0.6f }, new CanvasGradientStop { Color = Color.FromArgb(0, 128, 128, 255), Position = 1.0f } }); rgb.RadiusX = rgb.RadiusY = BlobSize; _blobBrush = rgb; // table transfer table ttt = new List<float>(); for (int i = 0; i < 100; i++) { ttt.Add(i < Threshold ? 0.0f : 1.0f); } // setup _blobRenderTarget = new CanvasRenderTarget(sender, sender.Size); _pre = new PremultiplyEffect {Source = _blobRenderTarget}; _tte = new TableTransferEffect {ClampOutput = true, Source = _pre}; _tte.AlphaTable = _tte.RedTable = _tte.GreenTable = _tte.BlueTable = ttt.ToArray(); _un = new UnPremultiplyEffect {Source = _tte}; _gbe = new GaussianBlurEffect {BlurAmount = 8.0f, Source = _un}; _mask = new CanvasImageBrush(sender) {SourceRectangle = new Rect(new Point(), sender.Size)}; }
public void Loadd() { MAIN = new Transform2DEffect { Source = Shape, }; var c = color; c.A = (byte)(255 * (density)); ICanvasImage Main() { if (Texture == null) { return(MAIN); } return(new ArithmeticCompositeEffect { Source1 = MAIN, Source2 = new TileEffect { Source = Texture, SourceRectangle = new Rect(0, 0, Texture.Size.Width, Texture.Size.Height) }, MultiplyAmount = 1, Source1Amount = 0, Source2Amount = 0, }); } ICanvasImage Color() { var cc = new PremultiplyEffect { Source = new ColorSourceEffect { Color = c } }; if (blend == 0 && dilution == 0) { ECAN = null; return(cc); } ECAN = new TileEffect { Source = new GaussianBlurEffect { Source = Canvas, } }; return(new ArithmeticCompositeEffect { Source1 = new CompositeEffect { Sources = { new PremultiplyEffect { Source = cc }, new LinearTransferEffect { Source = ECAN, AlphaSlope = blend } } }, MultiplyAmount = 0, Source1Amount = 1 - dilution, Source2 = ECAN, Source2Amount = dilution, }); } MASK = new LuminanceToAlphaEffect { Source = Main(), }; ERAS = new ArithmeticCompositeEffect { Source1 = Color(), Source2 = new InvertEffect { Source = new LuminanceToAlphaEffect { Source = Main(), } }, MultiplyAmount = 1, Source1Amount = 0, Source2Amount = 0, }; }