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));
        }
Пример #4
0
        //定向模糊方法
        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,
            });
        }
Пример #5
0
        //高斯模糊方法
        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,
            });
        }
Пример #6
0
        /// <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" }));
        }