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));          
        }
예제 #2
0
        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))
            };
        }
예제 #3
0
		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 })
			);
        }
예제 #4
0
        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]);
        }
예제 #6
0
        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]);
        }
예제 #7
0
        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));
        }
예제 #10
0
        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]);
        }
예제 #13
0
        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));
        }
예제 #14
0
 protected override MaybeTask <IImageProvider> GetEffectInternalAsync(IImageProvider source, Size sourceSize, Size renderSize)
 {
     return(LayerList.ToImageProvider(source, sourceSize, renderSize));
 }
예제 #15
0
        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
            })
                );
        }