2017-08-30 1 views
0

Ich versuche, einen Farbton-Schieberegler mit Werten 0-1 zu machen.Farbton-Schieberegler mit HSL-Farbklasse

Wenn Sie den Schieberegler einstellen, sollte sich die Farbe des Rechtecks ​​ändern.

Es funktioniert für Luminenz und Sättigung, aber nicht für Farbton. Es bleibt immer die gleiche Farbe.


Hue

Hue Slider

Luminanz

Lum Slider


Ich verwende diese HSL Farbe Klasse

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

Project Source

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> 

Antwort

0

fand ich die Antwort war die Methode wie folgt zu verwenden:

Set Farbton von 240, oder stellen Sie den Schieberegler zu multiplizieren 0-240, Sättigung zu voll und Helligkeit auf die Hälfte zu verwenden.

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