public SeaShellEffect() { m_hueSaturationEffect = new HueSaturationEffect() { Saturation = 0.6 -1 }; m_vibranceEffect = new VibranceEffect() { Level = .6 }; m_splitToningEffect = new SplitToneEffect { ShadowsHue = 230, ShadowsSaturation = 37, HighlightsHue = 50, HighlightsSaturation = 20 }; var globalCurve = new Curve(CurveInterpolation.Linear, new[] { new Point(0, 10), new Point(32, 68), new Point(64, 119), new Point(96, 158), new Point(128, 187), new Point(160, 209), new Point(192, 226), new Point(255, 248) }); var curve = new Curve(CurveInterpolation.Linear, new[] { new Point(10, 0), new Point(32, 27), new Point(70, 70) }); var redCurve = globalCurve; var greenCurve = Curve.Compose(curve, globalCurve, null); var blueCurve = globalCurve; var curvesEffect = new CurvesEffect(redCurve, greenCurve, blueCurve); var colorizationLayerList = new LayerList( new AdjustmentLayer(LayerStyle.Normal(), new GrayscaleEffect()), new Layer(LayerStyle.Multiply(), context => new ColorImageSource(context.HintedRenderSize, Color.FromArgb(0xff, 0xff, 0xe6, 0x99))) ); LayerList.AddRange( new AdjustmentLayer(LayerStyle.Normal(0.2), context => colorizationLayerList.ToImageProvider(context.BackgroundImage, context.HintedRenderSize, context.HintedRenderSize)), new AdjustmentLayer(LayerStyle.Normal(), new ContrastEffect(-0.15)), new AdjustmentLayer(LayerStyle.Normal(), curvesEffect), new AdjustmentLayer(LayerStyle.Normal(), m_hueSaturationEffect), new AdjustmentLayer(LayerStyle.Normal(), m_vibranceEffect), new AdjustmentLayer(LayerStyle.Normal(), m_splitToningEffect) ); Editors.Add(new RangeEditorViewModel<SeaShellEffect>("SaturationLevel", -1.0, 1.0, this, filter => filter.SaturationLevel, (filter, value) => filter.SaturationLevel = value)); // Editors.Add(new RangeEditorViewModel<SeaShellEffect>("ContrastLevel", -1.0, 1.0, this, filter => filter.ContrastLevel, (filter, value) => filter.ContrastLevel = value)); Editors.Add(new RangeEditorViewModel<SeaShellEffect>("VibranceLevel", 0, 1.0, this, filter => filter.VibranceLevel, (filter, value) => filter.VibranceLevel = value)); Editors.Add(new RangeEditorViewModel<SeaShellEffect>("ShadowsHue", 0, 365, this, filter => filter.ShadowsHue, (filter, value) => filter.ShadowsHue = (int)value)); Editors.Add(new RangeEditorViewModel<SeaShellEffect>("ShadowsSaturation", 0, 100, this, filter => filter.ShadowsSaturation, (filter, value) => filter.ShadowsSaturation = (int)value)); Editors.Add(new RangeEditorViewModel<SeaShellEffect>("HighlightsHue", 0, 365, this, filter => filter.HighlightsHue, (filter, value) => filter.HighlightsHue = (int)value)); Editors.Add(new RangeEditorViewModel<SeaShellEffect>("HighlightsSaturation", 0, 100, this, filter => filter.HighlightsSaturation, (filter, value) => filter.HighlightsSaturation = (int)value)); }
public BWEffect() { var curvesEffect = new CurvesEffect(new Curve(CurveInterpolation.NaturalCubicSpline) { Points = new[] { new Point(0,0), new Point(41, 59), new Point(112, 146), new Point(189, 211), new Point(255, 255), } }); m_lomoStack = new LayerList() { new AdjustmentLayer(LayerStyle.Normal(), new LomoEffect(0.3, 0.0, LomoVignetting.High, LomoStyle.Neutral)) }; LayerList = new LayerList() { new AdjustmentLayer(LayerStyle.Normal(), curvesEffect), new AdjustmentLayer(LayerStyle.Normal(), new GrayscaleEffect()), new AdjustmentLayer(LayerStyle.Normal(), new SharpnessEffect(0.15)), new Layer(LayerStyle.Hardlight(0.1), context => m_lomoStack.ToImageProvider(context.BackgroundImage, context.HintedRenderSize)) }; }
public QuartzEffect() { m_cachingEffect = new CachingEffect(); var curve = new Curve(); curve.SetPoint(16, 7); curve.SetPoint(39, 24); curve.SetPoint(208, 223); curve.SetPoint(234, 247); var positiveBrightnessCurve = new Curve(CurveInterpolation.Linear, new[] { new Point(48, 124), new Point(64, 162), new Point(80, 193), new Point(96, 214), new Point(112, 229), new Point(128, 239), new Point(144, 245), new Point(160, 249), new Point(192, 253), new Point(240, 255) }); var negativeBrightnessCurve = new Curve(CurveInterpolation.Linear, new[] { new Point(160, 63), new Point(192, 79), new Point(208, 90), new Point(224, 106), new Point(236, 123), new Point(244, 141), new Point(248, 156), new Point(252, 183) }); var brightnessCurve = Curve.Interpolate(new Curve(), positiveBrightnessCurve, 0.1, null); var clarityList = new LayerList( new AdjustmentLayer(LayerStyle.Normal(), m_cachingEffect), new AdjustmentLayer(LayerStyle.Softlight(), new SDKTestApp_Native.HighpassEffect(100, true, 8)) ); LayerList.AddRange( new AdjustmentLayer(LayerStyle.Normal(), new CurvesEffect(curve)), new AdjustmentLayer(LayerStyle.Normal(), new CurvesEffect(brightnessCurve)), // Clarity new Layer(LayerStyle.Darken(), context => clarityList.ToImageProvider(context.BackgroundImage, context.HintedRenderSize)), new AdjustmentLayer(LayerStyle.Normal(), new HueSaturationEffect(0, 0.65-1)), new AdjustmentLayer(LayerStyle.Normal(), new VibranceEffect() { Level = 0.1 }), new AdjustmentLayer(LayerStyle.Normal(), new SDKTestApp_Native.SplitToneEffect() { HighlightsSaturation = 42, HighlightsHue = 45 }) ); }
public async Task RenderWithBackgroundPassedInConstructor() { var backgroundImage = new ColorImageSource(new Size(100, 100), Color.FromArgb(255, 128, 128, 128)); var layerList = new LayerList(backgroundImage, backgroundImage.Size, new Layer[] { new Layer(LayerStyle.Add(), context => new ColorImageSource(context.BackgroundLayer.ImageSize, Color.FromArgb(255, 32, 16, 8))) }); var layersEffect = await layerList.ToImageProvider().AsTask(); var renderedBitmap = await layersEffect.GetBitmapAsync(null, OutputOption.PreserveAspectRatio); var pixels = renderedBitmap.Buffers[0].Buffer.ToArray(); Assert.AreEqual(135, pixels[0]); Assert.AreEqual(143, pixels[1]); Assert.AreEqual(160, pixels[2]); Assert.AreEqual(255, pixels[3]); }
public async Task RenderWithBackgroundAndDifferentRenderSizePassedInToImageProvider() { var layerList = new LayerList(new Layer[] { new Layer(LayerStyle.Add(), context => new ColorImageSource(context.BackgroundLayer.ImageSize, Color.FromArgb(255, 32, 16, 8))) }); var backgroundImage = new ColorImageSource(new Size(100, 100), Color.FromArgb(255, 128, 128, 128)); var layersEffect = await layerList.ToImageProvider(backgroundImage, backgroundImage.Size, new Size(50, 50)).AsTask(); var bitmap = new Bitmap(new Size(50, 50), ColorMode.Bgra8888); await layersEffect.GetBitmapAsync(bitmap, OutputOption.PreserveAspectRatio); var pixels = bitmap.Buffers[0].Buffer.ToArray(); Assert.AreEqual(135, pixels[0]); Assert.AreEqual(143, pixels[1]); Assert.AreEqual(159, pixels[2]); Assert.AreEqual(255, pixels[3]); }
public async Task RenderWithBackgroundAndDifferentRenderSizePassedInToImageProvider() { var layerList = new LayerList(new Layer[] { new Layer(LayerStyle.Add(), context => new ColorImageSource(context.BackgroundLayer.ImageSize, Color.FromArgb(255, 32, 16, 8))) }); var backgroundImage = new ColorImageSource(new Size(100, 100), Color.FromArgb(255, 128, 128, 128)); var layersEffect = await layerList.ToImageProvider(backgroundImage, backgroundImage.ImageSize, new Size(50, 50)).AsTask(); var bitmap = new Bitmap(new Size(50, 50), ColorMode.Bgra8888); var bitmapRenderer = new BitmapRenderer(layersEffect, bitmap); var renderedBitmap = await bitmapRenderer.RenderAsync(); var pixels = bitmap.Buffers[0].Buffer.ToArray(); Assert.AreEqual(136, pixels[0]); Assert.AreEqual(144, pixels[1]); Assert.AreEqual(160, pixels[2]); Assert.AreEqual(255, pixels[3]); }
public OpalEffect() { m_cachingEffect = new CachingEffect(); var clarityList = new LayerList( new AdjustmentLayer(LayerStyle.Normal(), m_cachingEffect), new AdjustmentLayer(LayerStyle.Softlight(), new SDKTestApp_Native.HighpassEffect(100, true, 8)) ); m_selectiveColorEffect = new SelectiveColorEffect { Red = new CMYK {Yellow = 5}, Yellow = new CMYK {Yellow = 40, Key = 15}, Green = new CMYK {Cyan = 20, Yellow = 20, Key = 30}, Cyan = new CMYK {Key = 61}, Blue = new CMYK {Key = 30} }; LayerList.AddRange( // Clarity new Layer(LayerStyle.Darken(0.5), context => clarityList.ToImageProvider(context.BackgroundImage, context.HintedRenderSize)), new AdjustmentLayer(LayerStyle.Normal(), m_selectiveColorEffect), new AdjustmentLayer(LayerStyle.Normal(), new HueSaturationEffect(0.0, 0.06)), new AdjustmentLayer(LayerStyle.Normal(), new VibranceEffect() { Level = 0.1 }), new Layer(LayerStyle.Overlay(), context => new ColorImageSource(context.HintedRenderSize, Color.FromArgb(0xFF, 0xFF, 0xE6, 0x99))) ); /* Editors.Add(new RangeEditorViewModel<OpalEffect>("SaturationLevel", -1.0, 1.0, this, filter => filter.SaturationLevel, (filter, value) => filter.SaturationLevel = value)); // Editors.Add(new RangeEditorViewModel<OpalEffect>("ContrastLevel", -1.0, 1.0, this, filter => filter.ContrastLevel, (filter, value) => filter.ContrastLevel = value)); Editors.Add(new RangeEditorViewModel<OpalEffect>("VibranceLevel", 0, 1.0, this, filter => filter.VibranceLevel, (filter, value) => filter.VibranceLevel = value)); Editors.Add(new RangeEditorViewModel<OpalEffect>("ShadowsHue", 0, 365, this, filter => filter.ShadowsHue, (filter, value) => filter.ShadowsHue = (int)value)); Editors.Add(new RangeEditorViewModel<OpalEffect>("ShadowsSaturation", 0, 100, this, filter => filter.ShadowsSaturation, (filter, value) => filter.ShadowsSaturation = (int)value)); Editors.Add(new RangeEditorViewModel<OpalEffect>("HighlightsHue", 0, 365, this, filter => filter.HighlightsHue, (filter, value) => filter.HighlightsHue = (int)value)); Editors.Add(new RangeEditorViewModel<OpalEffect>("HighlightsSaturation", 0, 100, this, filter => filter.HighlightsSaturation, (filter, value) => filter.HighlightsSaturation = (int)value)); */ }
public async Task ImageProviderTopology() { var backgroundImage = new ColorImageSource(new Size(100, 100), Color.FromArgb(255, 128, 128, 128)); var layerList = new LayerList(backgroundImage, backgroundImage.Size, new Layer[] { new Layer(LayerStyle.Multiply(), context => new ColorImageSource(context.BackgroundLayer.ImageSize, Color.FromArgb(255, 32, 16, 8))), new AdjustmentLayer(LayerStyle.Screen(0.5), new ContrastFilter(0.7)), new AdjustmentLayer(LayerStyle.Normal(), new BrightnessFilter(0.7)), new AdjustmentLayer(LayerStyle.Normal(), new GrayscaleFilter()) }); var layersEffect = await layerList.ToImageProvider(new Size(50, 50)).AsTask(); var chain = GetChain(layersEffect); Assert.AreEqual(5, chain.Count); Assert.AreSame(backgroundImage, chain.FirstOrDefault()); Assert.IsInstanceOfType(chain[1], typeof(BlendEffect)); // Layer with ColorImageSource Assert.IsInstanceOfType(((BlendEffect)chain[1]).ForegroundSource, typeof(ColorImageSource)); Assert.IsInstanceOfType(chain[2], typeof(BlendEffect)); Assert.IsInstanceOfType(((BlendEffect)chain[2]).ForegroundSource, typeof(FilterEffect)); Assert.IsInstanceOfType(((FilterEffect)((BlendEffect)chain[2]).ForegroundSource).Filters.Single(), typeof(ContrastFilter)); Assert.IsInstanceOfType(chain[3], typeof(FilterEffect)); Assert.IsInstanceOfType(((FilterEffect)chain[3]).Filters.Single(), typeof(BrightnessFilter)); Assert.IsInstanceOfType(chain[4], typeof(FilterEffect)); Assert.IsInstanceOfType(((FilterEffect)chain[4]).Filters.Single(), typeof(GrayscaleFilter)); // Assert.IsInstanceOfType(chain[5], typeof(FilterEffect)); // Assert.IsInstanceOfType(((FilterEffect)chain[5]).Filters.Single(), typeof(ReframingFilter)); }
public async Task ImageProviderTopology() { var backgroundImage = new ColorImageSource(new Size(100, 100), Color.FromArgb(255, 128, 128, 128)); var layerList = new LayerList(backgroundImage, backgroundImage.ImageSize, new Layer[] { new Layer(LayerStyle.Multiply(), context => new ColorImageSource(context.BackgroundLayer.ImageSize, Color.FromArgb(255,32,16,8))), new AdjustmentLayer(LayerStyle.Screen(0.5), new ContrastEffect(0.7)), new AdjustmentLayer(LayerStyle.Normal(), new BrightnessEffect(0.7)), new AdjustmentLayer(LayerStyle.Normal(), new GrayscaleEffect()) }); var layersEffect = await layerList.ToImageProvider(new Size(50,50)).AsTask(); var chain = GetChain(layersEffect); Assert.AreEqual(5, chain.Count); Assert.AreSame(backgroundImage, chain.FirstOrDefault()); Assert.IsInstanceOfType(chain[1],typeof(BlendEffect)); // Layer with ColorImageSource Assert.IsInstanceOfType(((BlendEffect)chain[1]).ForegroundSource, typeof(ColorImageSource)); Assert.IsInstanceOfType(chain[2], typeof(BlendEffect)); Assert.IsInstanceOfType(((BlendEffect)chain[2]).ForegroundSource, typeof(ContrastEffect)); Assert.IsInstanceOfType(chain[3], typeof(BrightnessEffect)); Assert.IsInstanceOfType(chain[4], typeof(GrayscaleEffect)); }
public async Task RenderWithBackgroundAndDifferentRenderSizePassedInToImageProvider() { var layerList = new LayerList(new Layer[] { new Layer(LayerStyle.Add(), context => new ColorImageSource(context.BackgroundLayer.ImageSize, Color.FromArgb(255,32,16,8))) }); var backgroundImage = new ColorImageSource(new Size(100, 100), Color.FromArgb(255, 128, 128, 128)); var layersEffect = await layerList.ToImageProvider(backgroundImage, backgroundImage.ImageSize, new Size(50,50)).AsTask(); var bitmap = new Bitmap(new Size(50,50), ColorMode.Bgra8888); var bitmapRenderer = new BitmapRenderer(layersEffect, bitmap); var renderedBitmap = await bitmapRenderer.RenderAsync(); var pixels = bitmap.Buffers[0].Buffer.ToArray(); Assert.AreEqual(136, pixels[0]); Assert.AreEqual(144, pixels[1]); Assert.AreEqual(160, pixels[2]); Assert.AreEqual(255, pixels[3]); }
public async Task ImageProviderTopologyWithNesting() { var secondaryBackgroundImage = new ColorImageSource(new Size(100, 100), Colors.RosyBrown); var secondaryLayerList = new LayerList(secondaryBackgroundImage, secondaryBackgroundImage.Size, new Layer[] { new AdjustmentLayer(LayerStyle.Normal(), new BrightnessFilter(1.0), new ContrastFilter(0.1)) }); var backgroundImage = new ColorImageSource(new Size(100, 100), Color.FromArgb(255, 128, 128, 128)); var layerList = new LayerList(backgroundImage, backgroundImage.Size, new Layer[] { new Layer(LayerStyle.Multiply(), context => new ColorImageSource(context.BackgroundLayer.ImageSize, Color.FromArgb(255,32,16,8))), new AdjustmentLayer(LayerStyle.Screen(0.5), new ContrastFilter(0.7)), new AdjustmentLayer(LayerStyle.Normal(), new BrightnessFilter(0.7)), new AdjustmentLayer(LayerStyle.Normal(), new GrayscaleFilter()), new AdjustmentLayer(LayerStyle.Overlay(), secondaryLayerList.ToImageProvider()) }); var layersEffect = await layerList.ToImageProvider(new Size(50, 50)).AsTask(); var chain = GetChain(layersEffect); Assert.AreEqual(6, chain.Count); Assert.AreSame(backgroundImage, chain.FirstOrDefault()); Assert.IsInstanceOfType(chain[1], typeof(BlendEffect)); // Layer with ColorImageSource Assert.IsInstanceOfType(((BlendEffect)chain[1]).ForegroundSource, typeof(ColorImageSource)); Assert.IsInstanceOfType(chain[2], typeof(BlendEffect)); Assert.IsInstanceOfType(((BlendEffect)chain[2]).ForegroundSource, typeof(FilterEffect)); Assert.IsInstanceOfType(((FilterEffect)((BlendEffect)chain[2]).ForegroundSource).Filters.Single(), typeof(ContrastFilter)); Assert.IsInstanceOfType(chain[3], typeof(FilterEffect)); Assert.IsInstanceOfType(((FilterEffect)chain[3]).Filters.Single(), typeof(BrightnessFilter)); Assert.IsInstanceOfType(chain[4], typeof(FilterEffect)); Assert.IsInstanceOfType(((FilterEffect)chain[4]).Filters.Single(), typeof(GrayscaleFilter)); Assert.IsInstanceOfType(chain[5], typeof(BlendEffect)); Assert.IsInstanceOfType(((BlendEffect)chain[5]).ForegroundSource, typeof(FilterEffect)); var filters = ((FilterEffect)((BlendEffect)chain[5]).ForegroundSource).Filters.ToArray(); Assert.IsInstanceOfType(filters[0], typeof(BrightnessFilter)); Assert.IsInstanceOfType(filters[1], typeof(ContrastFilter)); }
public async Task RenderWithBackgroundAndDifferentRenderSizePassedInToImageProvider() { var layerList = new LayerList(new Layer[] { new Layer(LayerStyle.Add(), context => new ColorImageSource(context.BackgroundLayer.ImageSize, Color.FromArgb(255,32,16,8))) }); var backgroundImage = new ColorImageSource(new Size(100, 100), Color.FromArgb(255, 128, 128, 128)); var layersEffect = await layerList.ToImageProvider(backgroundImage, backgroundImage.Size, new Size(50,50)).AsTask(); var bitmap = new Bitmap(new Size(50,50), ColorMode.Bgra8888); await layersEffect.GetBitmapAsync(bitmap, OutputOption.PreserveAspectRatio); var pixels = bitmap.Buffers[0].Buffer.ToArray(); Assert.AreEqual(135, pixels[0]); Assert.AreEqual(143, pixels[1]); Assert.AreEqual(159, pixels[2]); Assert.AreEqual(255, pixels[3]); }
public SeaShellEffect() { m_hueSaturationEffect = new HueSaturationEffect() { Saturation = 0.6 - 1 }; m_vibranceEffect = new VibranceEffect() { Level = .6 }; m_splitToningEffect = new SplitToneEffect { ShadowsHue = 230, ShadowsSaturation = 37, HighlightsHue = 50, HighlightsSaturation = 20 }; var globalCurve = new Curve(CurveInterpolation.Linear, new[] { new Point(0, 10), new Point(32, 68), new Point(64, 119), new Point(96, 158), new Point(128, 187), new Point(160, 209), new Point(192, 226), new Point(255, 248) }); var curve = new Curve(CurveInterpolation.Linear, new[] { new Point(10, 0), new Point(32, 27), new Point(70, 70) }); var redCurve = globalCurve; var greenCurve = Curve.Compose(curve, globalCurve, null); var blueCurve = globalCurve; var curvesEffect = new CurvesEffect(redCurve, greenCurve, blueCurve); var colorizationLayerList = new LayerList( new AdjustmentLayer(LayerStyle.Normal(), new GrayscaleEffect()), new Layer(LayerStyle.Multiply(), context => new ColorImageSource(context.HintedRenderSize, Color.FromArgb(0xff, 0xff, 0xe6, 0x99))) ); LayerList.AddRange( new AdjustmentLayer(LayerStyle.Normal(0.2), context => colorizationLayerList.ToImageProvider(context.BackgroundImage, context.HintedRenderSize, context.HintedRenderSize)), new AdjustmentLayer(LayerStyle.Normal(), new ContrastEffect(-0.15)), new AdjustmentLayer(LayerStyle.Normal(), curvesEffect), new AdjustmentLayer(LayerStyle.Normal(), m_hueSaturationEffect), new AdjustmentLayer(LayerStyle.Normal(), m_vibranceEffect), new AdjustmentLayer(LayerStyle.Normal(), m_splitToningEffect) ); Editors.Add(new RangeEditorViewModel <SeaShellEffect>("SaturationLevel", -1.0, 1.0, this, filter => filter.SaturationLevel, (filter, value) => filter.SaturationLevel = value)); // Editors.Add(new RangeEditorViewModel<SeaShellEffect>("ContrastLevel", -1.0, 1.0, this, filter => filter.ContrastLevel, (filter, value) => filter.ContrastLevel = value)); Editors.Add(new RangeEditorViewModel <SeaShellEffect>("VibranceLevel", 0, 1.0, this, filter => filter.VibranceLevel, (filter, value) => filter.VibranceLevel = value)); Editors.Add(new RangeEditorViewModel <SeaShellEffect>("ShadowsHue", 0, 365, this, filter => filter.ShadowsHue, (filter, value) => filter.ShadowsHue = (int)value)); Editors.Add(new RangeEditorViewModel <SeaShellEffect>("ShadowsSaturation", 0, 100, this, filter => filter.ShadowsSaturation, (filter, value) => filter.ShadowsSaturation = (int)value)); Editors.Add(new RangeEditorViewModel <SeaShellEffect>("HighlightsHue", 0, 365, this, filter => filter.HighlightsHue, (filter, value) => filter.HighlightsHue = (int)value)); Editors.Add(new RangeEditorViewModel <SeaShellEffect>("HighlightsSaturation", 0, 100, this, filter => filter.HighlightsSaturation, (filter, value) => filter.HighlightsSaturation = (int)value)); }
protected override MaybeTask <IImageProvider> GetEffectInternalAsync(IImageProvider source, Size sourceSize, Size renderSize) { return(LayerList.ToImageProvider(source, sourceSize, renderSize)); }
public QuartzEffect() { m_cachingEffect = new CachingEffect(); var curve = new Curve(); curve.SetPoint(16, 7); curve.SetPoint(39, 24); curve.SetPoint(208, 223); curve.SetPoint(234, 247); var positiveBrightnessCurve = new Curve(CurveInterpolation.Linear, new[] { new Point(48, 124), new Point(64, 162), new Point(80, 193), new Point(96, 214), new Point(112, 229), new Point(128, 239), new Point(144, 245), new Point(160, 249), new Point(192, 253), new Point(240, 255) }); var negativeBrightnessCurve = new Curve(CurveInterpolation.Linear, new[] { new Point(160, 63), new Point(192, 79), new Point(208, 90), new Point(224, 106), new Point(236, 123), new Point(244, 141), new Point(248, 156), new Point(252, 183) }); var brightnessCurve = Curve.Interpolate(new Curve(), positiveBrightnessCurve, 0.1, null); var clarityList = new LayerList( new AdjustmentLayer(LayerStyle.Normal(), m_cachingEffect), new AdjustmentLayer(LayerStyle.Softlight(), new SDKTestApp_Native.HighpassEffect(100, true, 8)) ); LayerList.AddRange( new AdjustmentLayer(LayerStyle.Normal(), new CurvesEffect(curve)), new AdjustmentLayer(LayerStyle.Normal(), new CurvesEffect(brightnessCurve)), // Clarity new Layer(LayerStyle.Darken(), context => clarityList.ToImageProvider(context.BackgroundImage, context.HintedRenderSize)), new AdjustmentLayer(LayerStyle.Normal(), new HueSaturationEffect(0, 0.65 - 1)), new AdjustmentLayer(LayerStyle.Normal(), new VibranceEffect() { Level = 0.1 }), new AdjustmentLayer(LayerStyle.Normal(), new SDKTestApp_Native.SplitToneEffect() { HighlightsSaturation = 42, HighlightsHue = 45 }) ); }