using System.Windows.Media.Effects; using Melskin.Appearance; namespace Melskin.Effects; /// /// 亮度对比度效果类。此效果用于调整图像或控件的亮度和对比度。 /// 继承自ShaderEffect,使用像素着色器实现对输入源的亮度和对比度调节功能。 /// public class BrightnessContrastEffect : ShaderEffect { /// /// 获取或设置作为效果输入的画刷。此属性定义了应用亮度对比度调整的基础图像或控件。 /// 通过设置不同的画刷,可以改变效果作用的对象。 /// public Brush Input { get => (Brush)GetValue(InputProperty); set => SetValue(InputProperty, value); } /// /// 获取或设置作为效果输入的画刷。此属性定义了应用亮度对比度调整的基础图像或控件。 /// 通过设置不同的画刷,可以改变效果作用的对象。 /// public static readonly DependencyProperty InputProperty = RegisterPixelShaderSamplerProperty("Input", typeof(BrightnessContrastEffect), 0); /// /// 获取或设置亮度效果的值。此属性允许用户调整应用到图像或控件上的亮度级别。 /// 亮度值为0时,表示没有亮度调整;正值增加亮度,负值减少亮度。 /// public double Brightness { get => (double)GetValue(BrightnessProperty); set => SetValue(BrightnessProperty, value); } /// /// 获取或设置亮度效果的值。此属性允许用户调整应用到图像或控件上的亮度级别。 /// 亮度值为0时,表示没有亮度调整;正值增加亮度,负值减少亮度。 /// public static readonly DependencyProperty BrightnessProperty = DependencyProperty.Register(nameof(Brightness), typeof(double), typeof(BrightnessContrastEffect), new PropertyMetadata(0.0, PixelShaderConstantCallback(0))); /// /// 获取或设置对比度效果的值。此属性允许用户调整应用到图像或控件上的对比度级别。 /// 对比度值为0时,表示没有对比度调整;正值增加对比度,负值减少对比度。 /// public double Contrast { get => (double)GetValue(ContrastProperty); set => SetValue(ContrastProperty, value); } /// /// 获取或设置对比度效果的值。此属性允许用户调整应用到图像或控件上的对比度级别。 /// 对比度值为0时,表示没有对比度调整;正值增加对比度,负值减少对比度。 /// public static readonly DependencyProperty ContrastProperty = DependencyProperty.Register(nameof(Contrast), typeof(double), typeof(BrightnessContrastEffect), new PropertyMetadata(0.0, PixelShaderConstantCallback(1))); /// /// 亮度对比度效果类。此效果用于调整图像或控件的亮度和对比度。 /// 继承自ShaderEffect,使用像素着色器实现对输入源的亮度和对比度调节功能。 /// public BrightnessContrastEffect() { var shaderUri = $"pack://application:,,,/{ThemeManager.LibraryNamespace};component/Shaders/BrightnessContrastEffect.ps"; PixelShader = new PixelShader() { UriSource = new Uri(shaderUri) }; UpdateShaderValue(InputProperty); UpdateShaderValue(BrightnessProperty); UpdateShaderValue(ContrastProperty); } }