internal PipelineBuilder Blur( float blur, out string target, EffectBorderMode mode = EffectBorderMode.Hard, EffectOptimization optimization = EffectOptimization.Balanced) { string name = Guid.NewGuid().ToUppercaseAsciiLetters(); target = $"{name}.{nameof(GaussianBlurEffect.BlurAmount)}"; async ValueTask <IGraphicsEffectSource> Factory() => new GaussianBlurEffect { BlurAmount = blur, BorderMode = mode, Optimization = optimization, Source = await this.sourceProducer(), Name = name }; return(new PipelineBuilder(this, Factory, new[] { target })); }
public PipelineBuilder Blur(float blur, out EffectAnimation <float> animation, EffectBorderMode mode = EffectBorderMode.Hard, EffectOptimization optimization = EffectOptimization.Balanced) { string id = Guid.NewGuid().ToUppercaseAsciiLetters(); async ValueTask <IGraphicsEffectSource> Factory() => new GaussianBlurEffect { BlurAmount = blur, BorderMode = mode, Optimization = optimization, Source = await this.sourceProducer(), Name = id }; animation = (brush, value, duration) => brush.StartAnimationAsync($"{id}.{nameof(GaussianBlurEffect.BlurAmount)}", value, duration); return(new PipelineBuilder(this, Factory, new[] { $"{id}.{nameof(GaussianBlurEffect.BlurAmount)}" })); }
public PipelineBuilder Blur(float blur, EffectBorderMode mode = EffectBorderMode.Hard, EffectOptimization optimization = EffectOptimization.Balanced) { async ValueTask <IGraphicsEffectSource> Factory() => new GaussianBlurEffect { BlurAmount = blur, BorderMode = mode, Optimization = optimization, Source = await this.sourceProducer() }; return(new PipelineBuilder(this, Factory)); }
//定向模糊方法 public static ICanvasImage GetDirectionalBlur(ICanvasImage canvasImage, float BlurAmount, float Angle, EffectOptimization Optimization, EffectBorderMode BorderMode) { if (BlurAmount < 0) { BlurAmount = 0; } else if (BlurAmount > 100) { BlurAmount = 100; } return(new DirectionalBlurEffect { Source = canvasImage, BlurAmount = BlurAmount, Angle = Angle, Optimization = Optimization, BorderMode = BorderMode, }); }
//高斯模糊方法 public static ICanvasImage GetGaussianBlur(ICanvasImage canvasImage, float BlurAmount, EffectOptimization Optimization = EffectOptimization.Speed, EffectBorderMode BorderMode = EffectBorderMode.Soft) { if (BlurAmount < 0) { BlurAmount = 0; } else if (BlurAmount > 100) { BlurAmount = 100; } return(new GaussianBlurEffect { Source = canvasImage, BlurAmount = BlurAmount, Optimization = Optimization, BorderMode = BorderMode, }); }
/// <summary> /// Adds a new <see cref="GaussianBlurEffect"/> to the current pipeline /// </summary> /// <param name="blur">The initial blur amount</param> /// <param name="animation">The optional blur animation for the effect</param> /// <param name="mode">The <see cref="EffectBorderMode"/> parameter for the effect, defaults to <see cref="EffectBorderMode.Hard"/></param> /// <param name="optimization">The <see cref="EffectOptimization"/> parameter to use, defaults to <see cref="EffectOptimization.Balanced"/></param> /// <remarks>Note that each pipeline can only contain a single instance of any of the built-in effects with animation support</remarks> public PipelineBuilder Blur(float blur, out EffectAnimation animation, EffectBorderMode mode = EffectBorderMode.Hard, EffectOptimization optimization = EffectOptimization.Balanced) { // Blur effect async Task <IGraphicsEffectSource> Factory() => new GaussianBlurEffect { BlurAmount = blur, BorderMode = mode, Optimization = optimization, Source = await SourceProducer(), Name = "Blur" }; animation = (brush, value, ms) => brush.StartAnimationAsync("Blur.BlurAmount", value, TimeSpan.FromMilliseconds(ms)); return(new PipelineBuilder(this, Factory, new[] { "Blur.BlurAmount" })); }