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 }) ); }
/// <summary> /// Constructs a high pass effect with the specified parameters. /// </summary> /// <param name="kernelSize">The size of the filter kernel. A larger size preserves more of lower frequencies.</param> /// <param name="isGrayscale">True if the highpass effect should give a grayscale result. Otherwise the individual R, G, B channels are treated separately.</param> /// <param name="downscaleDivisor">How much to downscale the image to reduce the cost of the internal blur operation, trading speed for some fidelity. Suitable value depends on the kernelSize.</param> public HighpassEffect(uint kernelSize, bool isGrayscale = false, uint downscaleDivisor = 1) { m_kernelSize = kernelSize; m_downscaleDivisor = downscaleDivisor; m_isGrayscale = isGrayscale; if (m_downscaleDivisor > 1) { m_downscaleFilterEffect = new FilterEffect(/*source*/) { Filters = new IFilter[] { new ScaleFilter(1.0 / m_downscaleDivisor) } }; m_downscaleCachingEffect = new CachingEffect(m_downscaleFilterEffect); int blurKernelSize = Math.Max(1, (int)(3.0 * m_kernelSize / m_downscaleDivisor)); m_blurFilter = new BlurFilter(blurKernelSize); m_blurredFilterEffect = new FilterEffect(m_downscaleCachingEffect) { Filters = new IFilter[] { m_blurFilter } }; m_highPassBlendEffect = new BlendEffect(/*source*/) { ForegroundSource = m_blurredFilterEffect, BlendFunction = BlendFunction.SignedDifference }; } else { int blurKernelSize = Math.Max(1, (int)(3.0 * m_kernelSize)); m_blurFilter = new BlurFilter(blurKernelSize); m_blurredFilterEffect = new FilterEffect(/*source*/) { Filters = new IFilter[] { m_blurFilter } }; m_highPassBlendEffect = new BlendEffect(/*source*/) { ForegroundSource = m_blurredFilterEffect, BlendFunction = BlendFunction.SignedDifference }; } if (m_isGrayscale) { m_highPassGrayscaleFilterEffect = new FilterEffect(m_highPassBlendEffect) { Filters = new IFilter[] { new GrayscaleFilter() } }; } }
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)); */ }
/// <summary> /// Constructs a high pass effect with the specified parameters. /// </summary> /// <param name="kernelSize">The size of the filter kernel. A larger size preserves more of lower frequencies.</param> /// <param name="isGrayscale">True if the highpass effect should give a grayscale result. Otherwise the individual R, G, B channels are treated separately.</param> /// <param name="downscaleDivisor">How much to downscale the image to reduce the cost of the internal blur operation, trading speed for some fidelity. Suitable value depends on the kernelSize.</param> public HighpassEffect(uint kernelSize, bool isGrayscale = false, uint downscaleDivisor = 1) { m_kernelSize = kernelSize; m_downscaleDivisor = downscaleDivisor; m_isGrayscale = isGrayscale; if (m_downscaleDivisor > 1) { m_downscaleFilterEffect = new FilterEffect(/*source*/) { Filters = new IFilter[] { new ScaleFilter(1.0 / m_downscaleDivisor) } }; m_downscaleCachingEffect = new CachingEffect(m_downscaleFilterEffect); int blurKernelSize = Math.Max(1, (int)(3.0 * m_kernelSize / m_downscaleDivisor)); m_blurFilter = new BlurFilter(blurKernelSize); m_blurredFilterEffect = new FilterEffect(m_downscaleCachingEffect) { Filters = new IFilter[] { m_blurFilter } }; m_highPassBlendEffect = new BlendEffect( /*source*/) { ForegroundSource = m_blurredFilterEffect, BlendFunction = BlendFunction.SignedDifference }; } else { int blurKernelSize = Math.Max(1, (int)(3.0 * m_kernelSize)); m_blurFilter = new BlurFilter(blurKernelSize); m_blurredFilterEffect = new FilterEffect(/*source*/) { Filters = new IFilter[] { m_blurFilter } }; m_highPassBlendEffect = new BlendEffect( /*source*/) { ForegroundSource = m_blurredFilterEffect, BlendFunction = BlendFunction.SignedDifference }; } if (m_isGrayscale) { m_highPassGrayscaleFilterEffect = new FilterEffect(m_highPassBlendEffect) { Filters = new IFilter[] { new GrayscaleFilter() } }; } }
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 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 }) ); }