private void RenderColor(Color SelectedColor) { ColorPicker.Color = SelectedColor; ColorRect.Background = new SolidColorBrush(SelectedColor); HEX.ColorCode = "#" + SelectedColor.ToHex().Remove(0, 3); RGB.ColorCode = SelectedColor.R + " " + SelectedColor.G + " " + SelectedColor.B; HslColor SelectedHSLColor = SelectedColor.ToHsl(); HSL.ColorCode = Math.Round(SelectedHSLColor.H, 0) + "° " + Math.Round(SelectedHSLColor.S, 0) + "% " + Math.Round(SelectedHSLColor.L, 0) + "%"; HsvColor SelectedHSVColor = SelectedColor.ToHsv(); HSB.ColorCode = Math.Round(SelectedHSVColor.H, 0) + "° " + Math.Round(SelectedHSVColor.S, 0) + "% " + Math.Round(SelectedHSVColor.V, 0) + "%"; XAML.ColorCode = SelectedColor.ToHex(); WPF.ColorCode = "Color.FromRGB(" + SelectedColor.R + ", " + SelectedColor.G + ", " + SelectedColor.B + ")"; UWP.ColorCode = "new Color() { R = " + SelectedColor.R + ", G = " + SelectedColor.G + ", B = " + SelectedColor.B + "}"; Maui.ColorCode = "Color.FromRGB(" + SelectedColor.R + ", " + SelectedColor.G + ", " + SelectedColor.B + ")"; CSSHEX.ColorCode = "#" + SelectedColor.ToHex().Remove(0, 3); CSSRGB.ColorCode = "rgb(" + SelectedColor.R + ", " + SelectedColor.G + ", " + SelectedColor.B + ")"; CSSHSL.ColorCode = "hsl(" + SelectedColor.R + ", " + SelectedColor.G + "%, " + SelectedColor.B + "%)"; Gradient1.Fill = new SolidColorBrush(ColorHelper.FromHsv(SelectedHSVColor.H, SelectedHSVColor.S, Max(SelectedHSVColor.V + 0.3))); Gradient2.Fill = new SolidColorBrush(ColorHelper.FromHsv(SelectedHSVColor.H, SelectedHSVColor.S, Max(SelectedHSVColor.V + 0.15))); Gradient3.Fill = new SolidColorBrush(ColorHelper.FromHsv(SelectedHSVColor.H, SelectedHSVColor.S, Min(SelectedHSVColor.V - 0.2))); Gradient4.Fill = new SolidColorBrush(ColorHelper.FromHsv(SelectedHSVColor.H, SelectedHSVColor.S, Min(SelectedHSVColor.V - 0.3))); }
public Color TransformColor(Color c) { if (c.IsSystemColor) { return(c); } var hsv = c.ToHsv(); if (!IgnoreSaturation) { if (hsv.S > MaxIconSaturationToInvert) { return(c); } } return(Color.FromArgb(c.A, c .ToPerceptedHsv() .Transform(v: tV) .ToActualHsv(c) .ToRgb() )); }
/// <summary> /// Gets the V component ("value") of the color in HSV color space. /// </summary> /// <param name="color">The color.</param> /// <returns>The value [0, 100].</returns> public static double GetV(this Color color) { double h, s, v; color.ToHsv(out h, out s, out v); return(v); }
private static ResourceDictionary GetAccentResource(Color color) { // Windows のテーマがアルファ チャネル 255 以外の色を返してくるけど、 // HSV で Active と Highlight 用の色を作る過程で結局失われるので、 // アルファ チャネルは 255 しかサポートしないようにしてしまおう感。 color.A = 255; var hsv = color.ToHsv(); var dark = hsv; var light = hsv; dark.V *= 0.8; light.S *= 0.6; var activeColor = dark.ToRgb(); var highlightColor = light.ToRgb(); var luminocity = Luminosity.FromRgb(color); var foreground = luminocity < 128 ? Colors.White : Colors.Black; var dic = new ResourceDictionary { ["AccentColorKey"] = color, ["AccentBrushKey"] = new SolidColorBrush(color), ["AccentActiveColorKey"] = activeColor, ["AccentActiveBrushKey"] = new SolidColorBrush(activeColor), ["AccentHighlightColorKey"] = highlightColor, ["AccentHighlightBrushKey"] = new SolidColorBrush(highlightColor), ["AccentForegroundColorKey"] = foreground, ["AccentForegroundBrushKey"] = new SolidColorBrush(foreground), }; return(dic); }
public static HsvColor ToHsvEx(this Color color) { var hsv = color.ToHsv(); hsv.H = Math.Round(hsv.H); hsv.S = Math.Round(hsv.S, 2); hsv.V = Math.Round(hsv.V, 2); return(hsv); }
public void RgbHsvRgb(Color c) { var hsv = c.ToHsv(); var rgb = hsv.ToRgb(); Assert.Equal(c.R, rgb.R); Assert.Equal(c.G, rgb.G); Assert.Equal(c.B, rgb.B); }
private static void AssertToHsvAndBack(Color original) { var hsv = original.ToHsv(); Color converted = ColorUtil.HsvToColor(hsv); Assert.AreEqual(original.r, converted.r); Assert.AreEqual(original.g, converted.g); Assert.AreEqual(original.b, converted.b); Assert.AreEqual(original.a, converted.a); }
public static Color AddHsv(this Color color, int hue, double saturation = 0, double value = 0) { HsvInfo hsvInfo = color.ToHsv(); hsvInfo.Hue += hue; hsvInfo.Saturation += saturation; hsvInfo.Value += value; return(hsvInfo.ToColor()); }
/// <summary> /// Returns the <see cref="Hsv"/> color model equivalent of this <see cref="Rgb"/> color. /// </summary> /// <returns>The <see cref="Hsv"/> equivalent color.</returns> public Hsv ToHsv() { // Instantiating an HsvColor is unfortunately necessary to use existing conversions // Clamping must be done here as it isn't done in the conversion method (internal-use only) HsvColor hsvColor = Color.ToHsv( MathUtilities.Clamp(R, 0.0, 1.0), MathUtilities.Clamp(G, 0.0, 1.0), MathUtilities.Clamp(B, 0.0, 1.0)); return(new Hsv(hsvColor)); }
public static void SetS(ref Color color, double s) { double h, dummy, v; color.ToHsv(out h, out dummy, out v); Color temp = FromHsv(h, s, v); color.R = temp.R; color.G = temp.G; color.B = temp.B; }
public static void SetV(ref Color color, double v) { double h, s, dummy; color.ToHsv(out h, out s, out dummy); Color temp = FromHsv(h, s, v); color.R = temp.R; color.G = temp.G; color.B = temp.B; }
private static Color CalculateHSLForOrganelle(Color rawColour) { // Get hue saturation and brightness for the colour float saturation = 0; float brightness = 0; float hue = 0; // According to stack overflow HSV and HSB are the same thing rawColour.ToHsv(out hue, out saturation, out brightness); return(Color.FromHsv(hue, saturation * 2, brightness)); }
public void Black_is_transformed_to_first_color() { Color c1 = Color.FromArgb(unchecked ((int)0xFF_FF_FF_00)); Color c2 = Color.FromArgb(unchecked ((int)0xFF_00_FF_00)); var transformation = new ColorSchemeTransformation(c1.ToHsv(), c2.ToHsv()); var sourceColor = Color.FromArgb(unchecked ((int)0xFF_00_00_00)); var transformed = transformation.TransformColor(sourceColor); Assert.That(transformed.ToArgb(), Is.EqualTo(unchecked ((int)0xFF_FF_FF_00))); }
private bool IsPurple(Color color) { var hsv = color.ToHsv(); var h = hsv.Hue; var v = hsv.Value; if (h > 240 && h < 280 && v > 0.65) { return(true); } return(false); }
public void Black_is_transformed_to_first_color_In_byte_array() { Color c1 = Color.FromArgb(unchecked ((int)0xFF_FF_FF_00)); Color c2 = Color.FromArgb(unchecked ((int)0xFF_00_FF_00)); var transformation = new ColorSchemeTransformation(c1.ToHsv(), c2.ToHsv()); var rgbValues = new byte[] { 0x00, 0x00, 0x00, 0xFF }; transformation.Transform(rgbValues, 0); var expectedTransformed = new byte[] { 0xFF, 0xFF, 0x00, 0xFF }; Assert.That(rgbValues, Is.EquivalentTo(expectedTransformed)); }
public Color TransformColor(Color c) { if (c.IsSystemColor) { return(c); } var hsv = c.ToHsv(); if (hsv.S > MaxIconSaturationToInvert) { return(c); } return(Color.FromArgb(c.A, Transform(hsv).ToRgb())); }
/// <summary> /// Sets the selected color. /// </summary> /// <param name="value">Value to set.</param> /// <param name="onlyHue">Deetrmines whether to only set H value (not SV).</param> public void SetColor(Color value, bool onlyHue = true) { var hsv = value.ToHsv(); mHue = hsv.H; if (!onlyHue) { mCursorPos.X = (int)(hsv.s * Width); mCursorPos.Y = (int)((1 - hsv.V) * Height); } Invalidate(); if (ColorChanged != null) { ColorChanged.Invoke(this, EventArgs.Empty); } }
/// <summary> /// Gets the current color determined by the slider values. /// </summary> private (Color, HsvColor) GetColorFromSliderValues() { HsvColor hsvColor = new HsvColor(); Color rgbColor = new Color(); double sliderPercent = Value / (Maximum - Minimum); var component = ColorComponent; if (ColorModel == ColorModel.Hsva) { var baseHsvColor = HsvColor; switch (component) { case ColorComponent.Alpha: { hsvColor = new HsvColor(sliderPercent, baseHsvColor.H, baseHsvColor.S, baseHsvColor.V); break; } case ColorComponent.Component1: { hsvColor = new HsvColor(baseHsvColor.A, sliderPercent * MaxHue, baseHsvColor.S, baseHsvColor.V); break; } case ColorComponent.Component2: { hsvColor = new HsvColor(baseHsvColor.A, baseHsvColor.H, sliderPercent, baseHsvColor.V); break; } case ColorComponent.Component3: { hsvColor = new HsvColor(baseHsvColor.A, baseHsvColor.H, baseHsvColor.S, sliderPercent); break; } } rgbColor = hsvColor.ToRgb(); } else { var baseRgbColor = Color; byte componentValue = Convert.ToByte(MathUtilities.Clamp(sliderPercent * 255, 0, 255)); switch (component) { case ColorComponent.Alpha: rgbColor = new Color(componentValue, baseRgbColor.R, baseRgbColor.G, baseRgbColor.B); break; case ColorComponent.Component1: rgbColor = new Color(baseRgbColor.A, componentValue, baseRgbColor.G, baseRgbColor.B); break; case ColorComponent.Component2: rgbColor = new Color(baseRgbColor.A, baseRgbColor.R, componentValue, baseRgbColor.B); break; case ColorComponent.Component3: rgbColor = new Color(baseRgbColor.A, baseRgbColor.R, baseRgbColor.G, componentValue); break; } hsvColor = rgbColor.ToHsv(); } if (IsRoundingEnabled) { hsvColor = RoundComponentValues(hsvColor); } return(rgbColor, hsvColor); }
/// <inheritdoc/> protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) { if (ignorePropertyChanged) { base.OnPropertyChanged(change); return; } // Always keep the two color properties in sync if (change.Property == ColorProperty) { ignorePropertyChanged = true; HsvColor = Color.ToHsv(); SetColorToSliderValues(); UpdateBackground(); UpdatePseudoClasses(); OnColorChanged(new ColorChangedEventArgs( change.GetOldValue <Color>(), change.GetNewValue <Color>())); ignorePropertyChanged = false; } else if (change.Property == ColorModelProperty) { ignorePropertyChanged = true; SetColorToSliderValues(); UpdateBackground(); UpdatePseudoClasses(); ignorePropertyChanged = false; } else if (change.Property == HsvColorProperty) { ignorePropertyChanged = true; Color = HsvColor.ToRgb(); SetColorToSliderValues(); UpdateBackground(); UpdatePseudoClasses(); OnColorChanged(new ColorChangedEventArgs( change.GetOldValue <HsvColor>().ToRgb(), change.GetNewValue <HsvColor>().ToRgb())); ignorePropertyChanged = false; } else if (change.Property == IsRoundingEnabledProperty) { SetColorToSliderValues(); } else if (change.Property == BoundsProperty) { UpdateBackground(); } else if (change.Property == ValueProperty || change.Property == MinimumProperty || change.Property == MaximumProperty) { ignorePropertyChanged = true; Color oldColor = Color; (var color, var hsvColor) = GetColorFromSliderValues(); if (ColorModel == ColorModel.Hsva) { HsvColor = hsvColor; Color = hsvColor.ToRgb(); } else { Color = color; HsvColor = color.ToHsv(); } UpdatePseudoClasses(); OnColorChanged(new ColorChangedEventArgs(oldColor, Color)); ignorePropertyChanged = false; } base.OnPropertyChanged(change); }
public static float RotationTo(this Color c, Color t) => t.ToHsv().H - c.ToHsv().H;
/// <inheritdoc/> protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) { if (ignorePropertyChanged) { base.OnPropertyChanged(change); return; } // Always keep the two color properties in sync if (change.Property == ColorProperty) { ignorePropertyChanged = true; HsvColor = Color.ToHsv(); SetColorToHexTextBox(); OnColorChanged(new ColorChangedEventArgs( change.GetOldValue <Color>(), change.GetNewValue <Color>())); ignorePropertyChanged = false; } else if (change.Property == HsvColorProperty) { ignorePropertyChanged = true; Color = HsvColor.ToRgb(); SetColorToHexTextBox(); OnColorChanged(new ColorChangedEventArgs( change.GetOldValue <HsvColor>().ToRgb(), change.GetNewValue <HsvColor>().ToRgb())); ignorePropertyChanged = false; } else if (change.Property == PaletteProperty) { IColorPalette?palette = Palette; // Any custom palette change must be automatically synced with the // bound properties controlling the palette grid if (palette != null) { PaletteColumnCount = palette.ColorCount; List <Color> newPaletteColors = new List <Color>(); for (int shadeIndex = 0; shadeIndex < palette.ShadeCount; shadeIndex++) { for (int colorIndex = 0; colorIndex < palette.ColorCount; colorIndex++) { newPaletteColors.Add(palette.GetColor(colorIndex, shadeIndex)); } } PaletteColors = newPaletteColors; } } else if (change.Property == IsAlphaEnabledProperty) { // Manually coerce the HsvColor value // (Color will be coerced automatically if HsvColor changes) HsvColor = OnCoerceHsvColor(HsvColor); } else if (change.Property == IsColorComponentsVisibleProperty || change.Property == IsColorPaletteVisibleProperty || change.Property == IsColorSpectrumVisibleProperty) { // When the property changed notification is received here the visibility // of individual tab items has not yet been updated through the bindings. // Therefore, the validation is delayed until after bindings update. Dispatcher.UIThread.Post(() => { ValidateSelection(); }, DispatcherPriority.Background); } else if (change.Property == SelectedIndexProperty) { // Again, it is necessary to wait for the SelectedIndex value to // be applied to the TabControl through binding before validation occurs. Dispatcher.UIThread.Post(() => { ValidateSelection(); }, DispatcherPriority.Background); } base.OnPropertyChanged(change); }
private static ResourceDictionary GetAccentResource(Color color) { // Windows のテーマがアルファ チャネル 255 以外の色を返してくるけど、 // HSV で Active と Highlight 用の色を作る過程で結局失われるので、 // アルファ チャネルは 255 しかサポートしないようにしてしまおう感。 color.A = 255; var hsv = color.ToHsv(); var dark = hsv; var light = hsv; dark.V *= 0.8; light.S *= 0.6; var activeColor = dark.ToRgb(); var highlightColor = light.ToRgb(); var luminocity = Luminosity.FromRgb(color); var foreground = luminocity < 128 ? Colors.White : Colors.Black; var dic = new ResourceDictionary { ["AccentColorKey"] = color, ["AccentBrushKey"] = new SolidColorBrush(color), ["AccentActiveColorKey"] = activeColor, ["AccentActiveBrushKey"] = new SolidColorBrush(activeColor), ["AccentHighlightColorKey"] = highlightColor, ["AccentHighlightBrushKey"] = new SolidColorBrush(highlightColor), ["AccentForegroundColorKey"] = foreground, ["AccentForegroundBrushKey"] = new SolidColorBrush(foreground), }; return dic; }
public static Color TransformHsv(this Color c, Func <float, float> h = null, Func <float, float> s = null, Func <float, float> v = null) => c.ToHsv().Transform(h, s, v).ToRgb();