Exemple #1
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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());
        }
Exemple #9
0
        /// <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));
        }
Exemple #10
0
        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;
        }
Exemple #11
0
        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;
        }
Exemple #12
0
    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)));
        }
Exemple #14
0
        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()));
        }
Exemple #17
0
        /// <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);
            }
        }
Exemple #18
0
        /// <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);
        }
Exemple #19
0
        /// <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);
        }
Exemple #20
0
 public static float RotationTo(this Color c, Color t) =>
 t.ToHsv().H - c.ToHsv().H;
Exemple #21
0
 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;
 }
Exemple #22
0
        /// <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);
        }
Exemple #23
0
        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;
        }
Exemple #24
0
 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();
Exemple #25
0
 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;
 }