public static IImageProvider Generate(IImageProvider objectMaskSource, LinearGradient gradient, Size size, IReadOnlyList <ILensBlurKernel> kernels) { var backgroundSource = new GradientImageSource(size, gradient); var blendEffect = new BlendEffect(backgroundSource, objectMaskSource, BlendFunction.Lighten); return(new IndexRemappingEffect(blendEffect, kernels.Count + 2)); }
public RadialGradientImageSourceEffectProcessor() { Name = "Radial Gradient"; m_radialGradient = new RadialGradient(new Point(0.5, 0.5), new EllipseRadius(0.5, 0.5)); m_radialGradient.Stops = new[] { new GradientStop{Offset=0.0, Color=Colors.Red}, new GradientStop{Offset=0.5, Color=Colors.Green}, new GradientStop{Offset=1.0, Color=Colors.Cyan} }; m_gradientImageSource = new GradientImageSource(new Size(800,500), m_radialGradient); SetupEffectCategory(m_gradientImageSource); m_propertyDescriptions = new Dictionary<string, PropertyDescription>(); m_propertyDescriptions.Add("CenterX", new PropertyDescription(0, 1.0, 0.5)); m_propertyDescriptions.Add("CenterY", new PropertyDescription(0, 1.0, 0.5)); m_propertyDescriptions.Add("RadiuxX", new PropertyDescription(0, 1.0, 0.5)); m_propertyDescriptions.Add("RadiuxY", new PropertyDescription(0, 1.0, 0.5)); AddEditors(); m_centerX = 0.5; m_centerY = 0.5; m_radiusX = 0.5; m_radiusY = 0.5; }
public LinearGradientImageSourceEffectProcessor() { Name = "Linear Gradient"; m_endX = 1.0; m_endY = 1.0; m_linearGradient = new LinearGradient(new Point(0.0, 0.0), new Point(1.0, 1.0)); m_linearGradient.Stops = new[] { new GradientStop { Offset = 0.0, Color = Colors.Red }, new GradientStop { Offset = 0.5, Color = Colors.Green }, new GradientStop { Offset = 1.0, Color = Colors.Cyan } }; m_gradientImageSource = new GradientImageSource(new Size(800, 500), m_linearGradient); SetupEffectCategory(m_gradientImageSource); m_propertyDescriptions = new Dictionary <string, PropertyDescription>(); m_propertyDescriptions.Add("StartX", new PropertyDescription(-1.0, 2.0, 0)); m_propertyDescriptions.Add("StartY", new PropertyDescription(-1.0, 2.0, 0)); m_propertyDescriptions.Add("EndX", new PropertyDescription(-1.0, 2.0, 0)); m_propertyDescriptions.Add("EndY", new PropertyDescription(-1.0, 2.0, 0)); AddEditors(); }
public LinearGradientImageSourceEffectProcessor() { Name = "Linear Gradient"; m_endX = 1.0; m_endY = 1.0; m_linearGradient = new LinearGradient(new Point(0.0, 0.0), new Point(1.0, 1.0)); m_linearGradient.Stops = new[] { new GradientStop{Offset=0.0, Color=Colors.Red}, new GradientStop{Offset=0.5, Color=Colors.Green}, new GradientStop{Offset=1.0, Color=Colors.Cyan} }; m_gradientImageSource = new GradientImageSource(new Size(800,500), m_linearGradient); SetupEffectCategory(m_gradientImageSource); m_propertyDescriptions = new Dictionary<string, PropertyDescription>(); m_propertyDescriptions.Add("StartX", new PropertyDescription(-1.0, 2.0, 0)); m_propertyDescriptions.Add("StartY", new PropertyDescription(-1.0, 2.0, 0)); m_propertyDescriptions.Add("EndX", new PropertyDescription(-1.0, 2.0, 0)); m_propertyDescriptions.Add("EndY", new PropertyDescription(-1.0, 2.0, 0)); AddEditors(); }
public RadialGradientImageSourceEffectProcessor() { Name = "Radial Gradient"; m_radialGradient = new RadialGradient(new Point(0.5, 0.5), new EllipseRadius(0.5, 0.5)); m_radialGradient.Stops = new[] { new GradientStop { Offset = 0.0, Color = Colors.Red }, new GradientStop { Offset = 0.5, Color = Colors.Green }, new GradientStop { Offset = 1.0, Color = Colors.Cyan } }; m_gradientImageSource = new GradientImageSource(new Size(800, 500), m_radialGradient); SetupEffectCategory(m_gradientImageSource); m_propertyDescriptions = new Dictionary <string, PropertyDescription>(); m_propertyDescriptions.Add("CenterX", new PropertyDescription(0, 1.0, 0.5)); m_propertyDescriptions.Add("CenterY", new PropertyDescription(0, 1.0, 0.5)); m_propertyDescriptions.Add("RadiuxX", new PropertyDescription(0, 1.0, 0.5)); m_propertyDescriptions.Add("RadiuxY", new PropertyDescription(0, 1.0, 0.5)); AddEditors(); m_centerX = 0.5; m_centerY = 0.5; m_radiusX = 0.5; m_radiusY = 0.5; }
protected override MaybeTask <IImageProvider> GetEffectInternalAsync(IImageProvider source, Size sourceSize, Size renderSize) { var current = source; var gradientImageSource = new GradientImageSource(sourceSize, new RadialGradient(new Point(0.5, 0.3), new EllipseRadius(1.0, 0), new[] { new GradientStop() { Color = Color.FromArgb(255, 255, 255, 255), Offset = 0 }, new GradientStop() { Color = Color.FromArgb(255, 255, 255, 255), Offset = 0.1 }, new GradientStop() { Color = Color.FromArgb(255, 0, 0, 0), Offset = 0.101 }, new GradientStop() { Color = Color.FromArgb(255, 16, 16, 16), Offset = 0.8 }, } )); var lensblur = new LensBlurEffect(source, gradientImageSource, new ILensBlurKernel[] { new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 1), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 2), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 3), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 4), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 5), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 6), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 7), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 8), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 9), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 10), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 11), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 12), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 13), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 14), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 15), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 20), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 25), }); lensblur.BlendKernelWidth = 10; lensblur.FocusAreaEdgeMirroring = LensBlurFocusAreaEdgeMirroring.Off; // TODO lower quality in preview mode. lensblur.Quality = 1.0; return(new MaybeTask <IImageProvider>(lensblur)); }
public LandscapeBackgroundDoF() { Name = "LandscapeBackgroundDoF"; var radialGradient = new RadialGradient(new Point(0.5, 0.3), new EllipseRadius(0.2, 0.4)) { Stops = new [] { new GradientStop() {Color = foreground, Offset = 0}, new GradientStop() {Color = foreground, Offset = 0.5}, new GradientStop() {Color = background, Offset = 0.51}, new GradientStop() {Color = background, Offset = 0.9} } }; m_scribbles = new GradientImageSource(new Size(500, 500), radialGradient); //Editors.Add(new EnumEditorViewModel<LandscapeBackgroundDoF, DepthOfFieldQuality>("Quality", this, (effect) => //{ // if (effect.m_effectEffect == null) return DepthOfFieldQuality.Preview; // return effect.m_effectEffect.Quality; //}, (effect, value) => //{ // if (effect.m_effectEffect == null) // return; // effect.m_effectEffect.Quality = value; //})); Editors.Add(new RangeEditorViewModelEx<LandscapeBackgroundDoF>("Strength above horizon", 0, 1.0, this, (effect) => { if (effect.m_effectEffect == null) return 1.0; return effect.m_effectEffect.StrengthAboveHorizon; }, (effect, value) => { if (effect.m_effectEffect == null) return; effect.m_effectEffect.StrengthAboveHorizon = value; })); Editors.Add(new RangeEditorViewModelEx<LandscapeBackgroundDoF>("Strength below horizon", 0, 1.0, this, (effect) => { if (effect.m_effectEffect == null) return 1.0; return effect.m_effectEffect.StrengthBelowHorizon; }, (effect, value) => { if (effect.m_effectEffect == null) return; effect.m_effectEffect.StrengthBelowHorizon = value; })); }
protected override MaybeTask<IImageProvider> GetEffectInternalAsync(IImageProvider source, Size sourceSize, Size renderSize) { var current = source; var gradientImageSource = new GradientImageSource(sourceSize, new RadialGradient(new Point(0.5, 0.3), new EllipseRadius(1.0, 0), new[] { new GradientStop() { Color = Color.FromArgb(255, 255, 255, 255), Offset = 0 }, new GradientStop() { Color = Color.FromArgb(255, 255, 255, 255), Offset = 0.1 }, new GradientStop() { Color = Color.FromArgb(255, 0, 0, 0), Offset = 0.101 }, new GradientStop() { Color = Color.FromArgb(255, 16, 16, 16), Offset = 0.8 }, } )); var lensblur = new LensBlurEffect(source, gradientImageSource, new ILensBlurKernel[] { new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 1), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 2), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 3), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 4), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 5), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 6), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 7), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 8), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 9), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 10), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 11), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 12), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 13), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 14), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 15), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 20), new LensBlurPredefinedKernel(LensBlurPredefinedKernelShape.Hexagon, 25), }); lensblur.BlendKernelWidth = 10; lensblur.FocusAreaEdgeMirroring = LensBlurFocusAreaEdgeMirroring.Off; // TODO lower quality in preview mode. lensblur.Quality = 1.0; return new MaybeTask<IImageProvider>(lensblur); }
protected override bool TryPrepareLensBlurProperties() { var kernelCount = Quality == DepthOfFieldQuality.Full ? 5 : 1; m_edge1KernelGenerator.KernelCount = kernelCount; m_edge2KernelGenerator.KernelCount = kernelCount; var sourceSize = GetSourceSize(); m_edge1KernelGenerator.SourceSize = sourceSize; m_edge2KernelGenerator.SourceSize = sourceSize; var kernels = LensBlurEffect.Kernels; var kernelGeneratorsAreDirty = m_edge1KernelGenerator.IsDirty || m_edge2KernelGenerator.IsDirty; var kernelBands = m_edge2KernelGenerator.GetKernelBands(m_edge1KernelGenerator.GetKernelBands()); bool blurShouldBeApplied = kernelBands.Count > 0; if (IsDirty || kernelGeneratorsAreDirty) { kernels = kernelBands.Select(band => band.Kernel).ToList(); if (kernels.Count > 0) { LensBlurEffect.Kernels = kernels; blurShouldBeApplied = true; } } if (blurShouldBeApplied && (IsDirty || kernelGeneratorsAreDirty || m_focusBand.IsDirty)) { var gradient = LensTiltFocusGradientGenerator.GenerateGradient(FocusBand, sourceSize, m_edge1KernelGenerator, m_edge2KernelGenerator, false); KernelMapSource = new GradientImageSource(GetKernelMapSize(), gradient); LensBlurEffect.KernelMapType = LensBlurKernelMapType.Continuous; LensBlurEffect.FocusAreaEdgeMirroring = LensBlurFocusAreaEdgeMirroring.Off; } m_focusBand.Reset(); return(blurShouldBeApplied); }
protected override bool TryPrepareLensBlurProperties() { m_kernelGenerator.KernelCount = (Quality == DepthOfFieldQuality.Preview) ? 1 : 5; m_kernelGenerator.SourceSize = GetSourceSize(); m_kernelGenerator.Strength = Strength; var kernelGeneratorIsDirty = m_kernelGenerator.IsDirty; var kernelBands = m_kernelGenerator.GetKernelBands(); bool blurShouldBeApplied = kernelBands.Count > 0; if (IsDirty || m_focusArea.IsDirty || kernelGeneratorIsDirty) { if (kernelBands.Count > 0) { var gradient = EllipticFocusGradientGenerator.GenerateGradient(m_focusArea.Value, m_kernelGenerator); KernelMapSource = new GradientImageSource(GetKernelMapSize(), gradient); if (IsDirty || m_strength.IsDirty) { LensBlurEffect.Kernels = kernelBands.Select(band => band.Kernel).ToList(); LensBlurEffect.BlendKernelWidth = LensBlurEffect.Kernels.Max(w => w.Size) / 2; LensBlurEffect.KernelMapType = LensBlurKernelMapType.Continuous; LensBlurEffect.FocusAreaEdgeMirroring = LensBlurFocusAreaEdgeMirroring.Off; } } } m_strength.Reset(); m_focusArea.Reset(); return(blurShouldBeApplied); }
public static Task<List<IImageProcessor>> CreateEffects() { // This seems to take 150-200 ms minimum, so better do it on the thread pool. return Task.Run(async () => { var imageProcessors = new List<IImageProcessor>(); EffectProcessor effectViewModel = null; var source = await PreloadedImages.Man; imageProcessors.Add(new EffectProcessor("Antique", new AntiqueEffect())); imageProcessors.Add(new EffectProcessor("Auto Enhance", new AutoEnhanceEffect())); imageProcessors.Add(new EffectProcessor("Auto Levels", new AutoLevelsEffect())); imageProcessors.Add(new BlendEffectProcessor()); imageProcessors.Add(new EffectProcessor("Blur", new BlurEffect())); imageProcessors.Add(new EffectProcessor("Brightness Effect", new BrightnessEffect())); imageProcessors.Add(new EffectProcessor("Cartoon", new CartoonEffect())); imageProcessors.Add(new EffectProcessor("ChromaKey", new ChromaKeyEffect())); imageProcessors.Add(new EffectProcessor("ColorAdjust", new ColorAdjustEffect())); imageProcessors.Add(new EffectProcessor("ColorBoost", new ColorBoostEffect(1.0))); imageProcessors.Add(new EffectProcessor("Colorization", new ColorizationEffect())); imageProcessors.Add(new EffectProcessor("Color Swap", new ColorSwapEffect(Windows.UI.Color.FromArgb(255, 255, 0, 0), Windows.UI.Color.FromArgb(255, 0, 255, 0), 0.8, false, true))); imageProcessors.Add(new EffectProcessor("Contrast", new ContrastEffect(0.5))); imageProcessors.Add(new CropEffectProcessor()); imageProcessors.Add(new CurveProcessor()); imageProcessors.Add(new EffectProcessor("Despeckle", new DespeckleEffect(DespeckleLevel.Low))); imageProcessors.Add(new EffectProcessor("Emboss", new EmbossEffect(0.5))); imageProcessors.Add(new EffectProcessor("Exposure", new ExposureEffect(ExposureMode.Natural, 0.5))); imageProcessors.Add(new EffectProcessor("Flip", new FlipEffect(FlipMode.Both))); imageProcessors.Add(new EffectProcessor("Fog", new FogEffect())); imageProcessors.Add(new EffectProcessor("Foundation", new FoundationEffect())); imageProcessors.Add(new EffectProcessor("GaussianNoise", new GaussianNoiseEffect(1.0))); var gradient = new RadialGradient(new Point(0.5, 0.5), new EllipseRadius(0.5, 0.5)); gradient.Stops = new[] { new GradientStop{Offset=0.0, Color=Colors.Red}, new GradientStop{Offset=1.0, Color=Colors.Cyan} }; var gradientImageSource = new GradientImageSource(new Size(800, 500), gradient); imageProcessors.Add(new EffectProcessor("Grayscale", new GrayscaleEffect())); imageProcessors.Add(new EffectProcessor("Grayscale Negative", new GrayscaleNegativeEffect())); imageProcessors.Add(new HSLProcessor()); imageProcessors.Add(new EffectProcessor("HdrEffect", new HdrEffect())); imageProcessors.Add(new EffectProcessor("HueSaturationEffect", new HueSaturationEffect())); effectViewModel = new EffectProcessor("Levels", new LevelsEffect(), true, true); { RangeEditorViewModelEx<LevelsEffect> blackEditor = null; RangeEditorViewModelEx<LevelsEffect> grayEditor = null; RangeEditorViewModelEx<LevelsEffect> whiteEditor = null; blackEditor = new RangeEditorViewModelEx<LevelsEffect>( "Black", 0.0, 1.0, effectViewModel, effect => effect.Black, (effect, value) => { effect.Black = value; if (grayEditor.Value < value) grayEditor.Value = value; if (whiteEditor.Value < value) whiteEditor.Value = value; }); grayEditor = new RangeEditorViewModelEx<LevelsEffect>( "Gray", 0.0, 1.0, effectViewModel, effect => effect.Gray, (effect, value) => { effect.Gray = value; if (blackEditor.Value > value) blackEditor.Value = value; if (whiteEditor.Value < value) whiteEditor.Value = value; }); whiteEditor = new RangeEditorViewModelEx<LevelsEffect>( "White", 0.0, 1.0, effectViewModel, effect => effect.White, (effect, value) => { effect.White = value; if (blackEditor.Value > value) blackEditor.Value = value; if (grayEditor.Value > value) grayEditor.Value = value; }); effectViewModel.Editors.Add(blackEditor); effectViewModel.Editors.Add(grayEditor); effectViewModel.Editors.Add(whiteEditor); } imageProcessors.Add(effectViewModel); imageProcessors.Add(new LinearGradientImageSourceEffectProcessor()); imageProcessors.Add(new EffectProcessor("Local Boost Automatic", new LocalBoostAutomaticEffect(8))); imageProcessors.Add(new EffectProcessor("LocalBoost", new LocalBoostEffect())); imageProcessors.Add(new EffectProcessor("Lomo", new LomoEffect())); imageProcessors.Add(new EffectProcessor("Magic Pen", new MagicPenEffect())); imageProcessors.Add(new EffectProcessor("Milky", new MilkyEffect())); imageProcessors.Add(new EffectProcessor("Mirror", new MirrorEffect())); imageProcessors.Add(new EffectProcessor("Mono Color", new MonoColorEffect(Windows.UI.Color.FromArgb(255, 255, 0, 0), 0.8))); imageProcessors.Add(new EffectProcessor("Moonlight", new MoonlightEffect(21))); imageProcessors.Add(new EffectProcessor("Negative", new NegativeEffect())); imageProcessors.Add(new EffectProcessor("Noise", new NoiseEffect(NoiseLevel.Maximum))); imageProcessors.Add(new EffectProcessor("Oily", new OilyEffect(OilBrushSize.Medium))); imageProcessors.Add(new EffectProcessor("Paint", new PaintEffect(4))); imageProcessors.Add(new EffectProcessor("Posterize", new PosterizeEffect(10))); imageProcessors.Add(new RadialGradientImageSourceEffectProcessor()); imageProcessors.Add(new ReframingEffectProcessor()); imageProcessors.Add(new EffectProcessor("Rotation", new RotationEffect())); imageProcessors.Add(new RgbLevelsEffectProcessor()); imageProcessors.Add(new RgbMixerEffectProcessor()); imageProcessors.Add(new SaturationLightnessProcessor()); imageProcessors.Add(new EffectProcessor("Sharpness", new SharpnessEffect(0.2))); imageProcessors.Add(new EffectProcessor("Sepia", new SepiaEffect())); imageProcessors.Add(new EffectProcessor("Sketch", new Lumia.Imaging.Artistic.SketchEffect(SketchMode.Color))); imageProcessors.Add(new EffectProcessor("Solarize", new SolarizeEffect(0.8))); imageProcessors.Add(new SplitToneEffectProcessor()); imageProcessors.Add(new SpotlightEffectProcessor()); imageProcessors.Add(new EffectProcessor("Stamp", new StampEffect(5, 200.0 / 255.0))); imageProcessors.Add(new EffectProcessor("Temperature and Tint", new TemperatureAndTintEffect(50.0 / 255.0, 50.0 / 255.0))); imageProcessors.Add(new EffectProcessor("Vibrance", new VibranceEffect())); imageProcessors.Add(new EffectProcessor("Vignetting", new VignettingEffect(0.8, Windows.UI.Color.FromArgb(255, 255, 0, 0)))); imageProcessors.Add(new EffectProcessor("Watercolor", new WatercolorEffect(0.8, 0.8))); imageProcessors.Add(new EffectProcessor("Warping", new WarpingEffect(WarpMode.Twister, 0.8))); imageProcessors.Add(new EffectProcessor("White Balance", new WhiteBalanceEffect(WhitePointCalculationMode.Maximum, Color.FromArgb(1,219,213,199)))); imageProcessors.Add(new EffectProcessor("Whiteboard Enhancement", new WhiteboardEnhancementEffect(WhiteboardEnhancementMode.Hard), canRenderAtPreviewSize: false)); //GlamMe effects imageProcessors.Add(new BWEffect()); imageProcessors.Add(new ElegantEffect()); imageProcessors.Add(new RetroEffect()); imageProcessors.Add(new VintageEffect()); imageProcessors.Add(new MintEffect()); imageProcessors.Add(new OldPosterEffect()); imageProcessors.Add(new LensBlureSampleEffect()); imageProcessors.Add(new GlamMeLomoEffect()); imageProcessors.Add(new FreshEffect()); imageProcessors.Add(new LightEffect()); // Creative Studio Effects imageProcessors.Add(new BWloEffect()); imageProcessors.Add(new IndoorEffect()); imageProcessors.Add(new SunsetEffect()); imageProcessors.Add(new BWHiEffect()); imageProcessors.Add(new BWCopperEffect()); imageProcessors.Add(new LoSatWarmEffect()); // imageProcessors.Add(new BlockTiltDoF()); // imageProcessors.Add(new EllipseTiltDoF()); // imageProcessors.Add(new LandscapeBackgroundDoF()); // imageProcessors.Add(new LensBlurProcessor()); // Special command editor return imageProcessors; }); }
protected override bool TryPrepareLensBlurProperties() { m_kernelGenerator.KernelCount = (Quality == DepthOfFieldQuality.Preview) ? 1 : 5; m_kernelGenerator.SourceSize = GetSourceSize(); m_kernelGenerator.Strength = Strength; var kernelGeneratorIsDirty = m_kernelGenerator.IsDirty; var kernelBands = m_kernelGenerator.GetKernelBands(); bool blurShouldBeApplied = kernelBands.Count > 0; if (IsDirty || m_focusArea.IsDirty || kernelGeneratorIsDirty) { if (kernelBands.Count > 0) { var gradient = EllipticFocusGradientGenerator.GenerateGradient(m_focusArea.Value, m_kernelGenerator); KernelMapSource = new GradientImageSource(GetKernelMapSize(), gradient); if (IsDirty || m_strength.IsDirty) { LensBlurEffect.Kernels = kernelBands.Select(band => band.Kernel).ToList(); LensBlurEffect.BlendKernelWidth = LensBlurEffect.Kernels.Max(w => w.Size) / 2; LensBlurEffect.KernelMapType = LensBlurKernelMapType.Continuous; LensBlurEffect.FocusAreaEdgeMirroring = LensBlurFocusAreaEdgeMirroring.Off; } } } m_strength.Reset(); m_focusArea.Reset(); return blurShouldBeApplied; }
public static Task <List <IImageProcessor> > CreateEffects() { // This seems to take 150-200 ms minimum, so better do it on the thread pool. return(Task.Run(async() => { var imageProcessors = new List <IImageProcessor>(); EffectProcessor effectViewModel = null; var source = await PreloadedImages.Man; imageProcessors.Add(new EffectProcessor("Antique", new AntiqueEffect())); imageProcessors.Add(new EffectProcessor("Auto Enhance", new AutoEnhanceEffect())); imageProcessors.Add(new EffectProcessor("Auto Levels", new AutoLevelsEffect())); imageProcessors.Add(new BlendEffectProcessor()); imageProcessors.Add(new EffectProcessor("Blur", new BlurEffect())); imageProcessors.Add(new EffectProcessor("Brightness Effect", new BrightnessEffect())); imageProcessors.Add(new EffectProcessor("Cartoon", new CartoonEffect())); imageProcessors.Add(new EffectProcessor("ChromaKey", new ChromaKeyEffect())); imageProcessors.Add(new EffectProcessor("ColorAdjust", new ColorAdjustEffect())); imageProcessors.Add(new EffectProcessor("ColorBoost", new ColorBoostEffect(1.0))); imageProcessors.Add(new EffectProcessor("Colorization", new ColorizationEffect())); imageProcessors.Add(new EffectProcessor("Color Swap", new ColorSwapEffect(Windows.UI.Color.FromArgb(255, 255, 0, 0), Windows.UI.Color.FromArgb(255, 0, 255, 0), 0.8, false, true))); imageProcessors.Add(new EffectProcessor("Contrast", new ContrastEffect(0.5))); imageProcessors.Add(new CropEffectProcessor()); imageProcessors.Add(new CurveProcessor()); imageProcessors.Add(new EffectProcessor("Despeckle", new DespeckleEffect(DespeckleLevel.Low))); imageProcessors.Add(new EffectProcessor("Emboss", new EmbossEffect(0.5))); imageProcessors.Add(new EffectProcessor("Exposure", new ExposureEffect(ExposureMode.Natural, 0.5))); imageProcessors.Add(new EffectProcessor("Flip", new FlipEffect(FlipMode.Both))); imageProcessors.Add(new EffectProcessor("Fog", new FogEffect())); imageProcessors.Add(new EffectProcessor("Foundation", new FoundationEffect())); imageProcessors.Add(new EffectProcessor("GaussianNoise", new GaussianNoiseEffect(1.0))); var gradient = new RadialGradient(new Point(0.5, 0.5), new EllipseRadius(0.5, 0.5)); gradient.Stops = new[] { new GradientStop { Offset = 0.0, Color = Colors.Red }, new GradientStop { Offset = 1.0, Color = Colors.Cyan } }; var gradientImageSource = new GradientImageSource(new Size(800, 500), gradient); imageProcessors.Add(new EffectProcessor("Grayscale", new GrayscaleEffect())); imageProcessors.Add(new EffectProcessor("Grayscale Negative", new GrayscaleNegativeEffect())); imageProcessors.Add(new HSLProcessor()); imageProcessors.Add(new EffectProcessor("HdrEffect", new HdrEffect())); imageProcessors.Add(new EffectProcessor("HueSaturationEffect", new HueSaturationEffect())); effectViewModel = new EffectProcessor("Levels", new LevelsEffect(), true, true); { RangeEditorViewModelEx <LevelsEffect> blackEditor = null; RangeEditorViewModelEx <LevelsEffect> grayEditor = null; RangeEditorViewModelEx <LevelsEffect> whiteEditor = null; blackEditor = new RangeEditorViewModelEx <LevelsEffect>( "Black", 0.0, 1.0, effectViewModel, effect => effect.Black, (effect, value) => { effect.Black = value; if (grayEditor.Value < value) { grayEditor.Value = value; } if (whiteEditor.Value < value) { whiteEditor.Value = value; } }); grayEditor = new RangeEditorViewModelEx <LevelsEffect>( "Gray", 0.0, 1.0, effectViewModel, effect => effect.Gray, (effect, value) => { effect.Gray = value; if (blackEditor.Value > value) { blackEditor.Value = value; } if (whiteEditor.Value < value) { whiteEditor.Value = value; } }); whiteEditor = new RangeEditorViewModelEx <LevelsEffect>( "White", 0.0, 1.0, effectViewModel, effect => effect.White, (effect, value) => { effect.White = value; if (blackEditor.Value > value) { blackEditor.Value = value; } if (grayEditor.Value > value) { grayEditor.Value = value; } }); effectViewModel.Editors.Add(blackEditor); effectViewModel.Editors.Add(grayEditor); effectViewModel.Editors.Add(whiteEditor); } imageProcessors.Add(effectViewModel); imageProcessors.Add(new LinearGradientImageSourceEffectProcessor()); imageProcessors.Add(new EffectProcessor("Local Boost Automatic", new LocalBoostAutomaticEffect(8))); imageProcessors.Add(new EffectProcessor("LocalBoost", new LocalBoostEffect())); imageProcessors.Add(new EffectProcessor("Lomo", new LomoEffect())); imageProcessors.Add(new EffectProcessor("Magic Pen", new MagicPenEffect())); imageProcessors.Add(new EffectProcessor("Milky", new MilkyEffect())); imageProcessors.Add(new EffectProcessor("Mirror", new MirrorEffect())); imageProcessors.Add(new EffectProcessor("Mono Color", new MonoColorEffect(Windows.UI.Color.FromArgb(255, 255, 0, 0), 0.8))); imageProcessors.Add(new EffectProcessor("Moonlight", new MoonlightEffect(21))); imageProcessors.Add(new EffectProcessor("Negative", new NegativeEffect())); imageProcessors.Add(new EffectProcessor("Noise", new NoiseEffect(NoiseLevel.Maximum))); imageProcessors.Add(new EffectProcessor("Oily", new OilyEffect(OilBrushSize.Medium))); imageProcessors.Add(new EffectProcessor("Paint", new PaintEffect(4))); imageProcessors.Add(new EffectProcessor("Posterize", new PosterizeEffect(10))); imageProcessors.Add(new RadialGradientImageSourceEffectProcessor()); imageProcessors.Add(new ReframingEffectProcessor()); imageProcessors.Add(new EffectProcessor("Rotation", new RotationEffect())); imageProcessors.Add(new RgbLevelsEffectProcessor()); imageProcessors.Add(new RgbMixerEffectProcessor()); imageProcessors.Add(new SaturationLightnessProcessor()); imageProcessors.Add(new EffectProcessor("Sharpness", new SharpnessEffect(0.2))); imageProcessors.Add(new EffectProcessor("Sepia", new SepiaEffect())); imageProcessors.Add(new EffectProcessor("Sketch", new Lumia.Imaging.Artistic.SketchEffect(SketchMode.Color))); imageProcessors.Add(new EffectProcessor("Solarize", new SolarizeEffect(0.8))); imageProcessors.Add(new SplitToneEffectProcessor()); imageProcessors.Add(new SpotlightEffectProcessor()); imageProcessors.Add(new EffectProcessor("Stamp", new StampEffect(5, 200.0 / 255.0))); imageProcessors.Add(new EffectProcessor("Temperature and Tint", new TemperatureAndTintEffect(50.0 / 255.0, 50.0 / 255.0))); imageProcessors.Add(new EffectProcessor("Vibrance", new VibranceEffect())); imageProcessors.Add(new EffectProcessor("Vignetting", new VignettingEffect(0.8, Windows.UI.Color.FromArgb(255, 255, 0, 0)))); imageProcessors.Add(new EffectProcessor("Watercolor", new WatercolorEffect(0.8, 0.8))); imageProcessors.Add(new EffectProcessor("Warping", new WarpingEffect(WarpMode.Twister, 0.8))); imageProcessors.Add(new EffectProcessor("White Balance", new WhiteBalanceEffect(WhitePointCalculationMode.Maximum, Color.FromArgb(1, 219, 213, 199)))); imageProcessors.Add(new EffectProcessor("Whiteboard Enhancement", new WhiteboardEnhancementEffect(WhiteboardEnhancementMode.Hard), canRenderAtPreviewSize: false)); //GlamMe effects imageProcessors.Add(new BWEffect()); imageProcessors.Add(new ElegantEffect()); imageProcessors.Add(new RetroEffect()); imageProcessors.Add(new VintageEffect()); imageProcessors.Add(new MintEffect()); imageProcessors.Add(new OldPosterEffect()); imageProcessors.Add(new LensBlureSampleEffect()); imageProcessors.Add(new GlamMeLomoEffect()); imageProcessors.Add(new FreshEffect()); imageProcessors.Add(new LightEffect()); // Creative Studio Effects imageProcessors.Add(new BWloEffect()); imageProcessors.Add(new IndoorEffect()); imageProcessors.Add(new SunsetEffect()); imageProcessors.Add(new BWHiEffect()); imageProcessors.Add(new BWCopperEffect()); imageProcessors.Add(new LoSatWarmEffect()); // imageProcessors.Add(new BlockTiltDoF()); // imageProcessors.Add(new EllipseTiltDoF()); // imageProcessors.Add(new LandscapeBackgroundDoF()); // imageProcessors.Add(new LensBlurProcessor()); // Special command editor return imageProcessors; })); }
protected override bool TryPrepareLensBlurProperties() { var kernelCount = Quality == DepthOfFieldQuality.Full ? 5 : 1; m_edge1KernelGenerator.KernelCount = kernelCount; m_edge2KernelGenerator.KernelCount = kernelCount; var sourceSize = GetSourceSize(); m_edge1KernelGenerator.SourceSize = sourceSize; m_edge2KernelGenerator.SourceSize = sourceSize; var kernels = LensBlurEffect.Kernels; var kernelGeneratorsAreDirty = m_edge1KernelGenerator.IsDirty || m_edge2KernelGenerator.IsDirty; var kernelBands = m_edge2KernelGenerator.GetKernelBands(m_edge1KernelGenerator.GetKernelBands()); bool blurShouldBeApplied = kernelBands.Count > 0; if (IsDirty || kernelGeneratorsAreDirty) { kernels = kernelBands.Select(band => band.Kernel).ToList(); if (kernels.Count > 0) { LensBlurEffect.Kernels = kernels; blurShouldBeApplied = true; } } if (blurShouldBeApplied && (IsDirty || kernelGeneratorsAreDirty || m_focusBand.IsDirty)) { var gradient = LensTiltFocusGradientGenerator.GenerateGradient(FocusBand, sourceSize, m_edge1KernelGenerator, m_edge2KernelGenerator, false); KernelMapSource = new GradientImageSource(GetKernelMapSize(), gradient); LensBlurEffect.KernelMapType = LensBlurKernelMapType.Continuous; LensBlurEffect.FocusAreaEdgeMirroring = LensBlurFocusAreaEdgeMirroring.Off; } m_focusBand.Reset(); return blurShouldBeApplied; }
public LandscapeBackgroundDoF() { Name = "LandscapeBackgroundDoF"; var radialGradient = new RadialGradient(new Point(0.5, 0.3), new EllipseRadius(0.2, 0.4)) { Stops = new [] { new GradientStop() { Color = foreground, Offset = 0 }, new GradientStop() { Color = foreground, Offset = 0.5 }, new GradientStop() { Color = background, Offset = 0.51 }, new GradientStop() { Color = background, Offset = 0.9 } } }; m_scribbles = new GradientImageSource(new Size(500, 500), radialGradient); //Editors.Add(new EnumEditorViewModel<LandscapeBackgroundDoF, DepthOfFieldQuality>("Quality", this, (effect) => //{ // if (effect.m_effectEffect == null) return DepthOfFieldQuality.Preview; // return effect.m_effectEffect.Quality; //}, (effect, value) => //{ // if (effect.m_effectEffect == null) // return; // effect.m_effectEffect.Quality = value; //})); Editors.Add(new RangeEditorViewModelEx <LandscapeBackgroundDoF>("Strength above horizon", 0, 1.0, this, (effect) => { if (effect.m_effectEffect == null) { return(1.0); } return(effect.m_effectEffect.StrengthAboveHorizon); }, (effect, value) => { if (effect.m_effectEffect == null) { return; } effect.m_effectEffect.StrengthAboveHorizon = value; })); Editors.Add(new RangeEditorViewModelEx <LandscapeBackgroundDoF>("Strength below horizon", 0, 1.0, this, (effect) => { if (effect.m_effectEffect == null) { return(1.0); } return(effect.m_effectEffect.StrengthBelowHorizon); }, (effect, value) => { if (effect.m_effectEffect == null) { return; } effect.m_effectEffect.StrengthBelowHorizon = value; })); }
public static IImageProvider Generate(IImageProvider objectMaskSource, LinearGradient gradient, Size size, IReadOnlyList<ILensBlurKernel> kernels) { var backgroundSource = new GradientImageSource(size, gradient); var blendEffect = new BlendEffect(backgroundSource, objectMaskSource, BlendFunction.Lighten); return new IndexRemappingEffect(blendEffect, kernels.Count + 2); }