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);
}
}