2017-08-30 191 views
0

我想使用值0-1制作一个色相滑块。色调滑块与HSL颜色分类

当您调整滑块时,它应该改变矩形的颜色。

它适用于Luminence和Saturation,但不适用于Hue。它始终保持相同的颜色。


色调

Hue Slider

Luminence

Lum Slider


我使用这个HSL色级

https://richnewman.wordpress.com/about/code-listings-and-diagrams/hslcolor-class/

项目来源

https://www.dropbox.com/s/fzj2kd01ei933y0/HueSlider.zip?dl=0


C#

public MainWindow() 
{ 
    InitializeComponent(); 

    baseColor = new System.Drawing.Color(); 
    baseColor = System.Drawing.Color.FromArgb(255, 255, 0, 0); //red 
} 


System.Drawing.Color baseColor; 
System.Drawing.Color newColor; 


// Hue Slider 
private void slHue_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) 
{ 
    // Change Hue 
    newColor = Hue(baseColor, (double)slHue.Value); 

    // Fill Rectangle 
    Color brushColor = Color.FromArgb(newColor.A, newColor.R, newColor.G, newColor.B); 
    Brush brush = new SolidColorBrush(brushColor); 
    rectangle.Fill = brush; 

    // Display Values 
    tbxHue.Text = slHue.Value.ToString(); 
    tbxRGB.Text = newColor.ToString(); 
} 


// Change Hue 
public System.Drawing.Color Hue(System.Drawing.Color color, double hue) 
{ 
    HSLColor hslColor = new HSLColor(color); 
    hslColor.Hue *= hue; // 0 to 1 

    return hslColor; 
} 

XAML

<Slider x:Name="slHue" 
     HorizontalAlignment="Left" 
     Margin="114,72,0,0" 
     VerticalAlignment="Top" 
     Width="99" 
     Minimum="0" 
     Maximum="1" 
     Value="0" 
     ValueChanged="slHue_ValueChanged"/> 

<Rectangle x:Name="rectangle" 
      HorizontalAlignment="Left" 
      Height="100" 
      Margin="29,31,0,0" 
      Stroke="Black" 
      VerticalAlignment="Top" 
      Width="100"> 
</Rectangle> 

回答

0

我找到了答案是使用这样的方法:

设置色相240倍增,或将滑块移动到使用0-240,饱和度,以充分和亮度的一半。

public System.Drawing.Color Hue(System.Drawing.Color color, double value) 
{ 
    HSLColor hslColor = new HSLColor(hue: value * 240, saturation: 240, luminosity: 120); 

    return hslColor; 
} 

Hue 1