2017-08-30 94 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