Exemplo n.º 1
0
        private void SetClosestIndex(Color color)
        {
            ColorMine.ColorSpaces.Rgb rgbColorStop = new ColorMine.ColorSpaces.Rgb()
            {
                R = color.R, G = color.G, B = color.B
            };
            Tuple <Color, double, int>[] colorWeights = new Tuple <Color, double, int> [TextSurface.Cells.Length];

            // Create a color weight for every cell compared to the color stop
            for (int x = 0; x < TextSurface.Cells.Length; x++)
            {
                ColorMine.ColorSpaces.Rgb rgbColor = new ColorMine.ColorSpaces.Rgb()
                {
                    R = this[x].Background.R, G = this[x].Background.G, B = this[x].Background.B
                };
                ColorMine.ColorSpaces.Cmy cmyColor = rgbColor.To <ColorMine.ColorSpaces.Cmy>();

                colorWeights[x] = new Tuple <Color, double, int>(this[x].Background, rgbColorStop.Compare(cmyColor, new ColorMine.ColorSpaces.Comparisons.Cie1976Comparison()), x);
            }

            var foundColor = colorWeights.OrderBy(t => t.Item2).First();

            this[_selectedColorPosition.X, _selectedColorPosition.Y].Glyph = 0;
            _selectedColorPosition = SadConsole.Surfaces.BasicSurface.GetPointFromIndex(foundColor.Item3, Width);
            this[_selectedColorPosition.X, _selectedColorPosition.Y].Glyph = 4;

            this.IsDirty = true;
        }
Exemplo n.º 2
0
        public override double Distance(Color3d circleColor, Color3d pixelColor, int distX, int distY)
        {
            if (circleColor.GetType() != pixelColor.GetType())
            {
                throw new Exception("Can't compare colors in different color spaces");
            }

            var circleColorRgb = circleColor.ConvertTo <ColorRgb>();
            var pixelColorRgb  = pixelColor.ConvertTo <ColorRgb>();

            var mineCircleColor = new ColorMine.ColorSpaces.Rgb
            {
                R = circleColorRgb.R,
                G = circleColorRgb.G,
                B = circleColorRgb.B
            };

            var minePixelColor = new ColorMine.ColorSpaces.Rgb
            {
                R = pixelColorRgb.R,
                G = pixelColorRgb.G,
                B = pixelColorRgb.B
            };

            var ciede2000diff = mineCircleColor.Compare(minePixelColor, new ColorMine.ColorSpaces.Comparisons.CieDe2000Comparison());
            int distFromPoint = (int)Math.Sqrt(distX * distX + distY * distY);

            return(ciede2000diff + distFromPoint);
        }
Exemplo n.º 3
0
        public double compareColor(Color c, Color k)
        {
            ColorMine.ColorSpaces.Rgb cRgb = new ColorMine.ColorSpaces.Rgb(c.R, c.G, c.B);
            ColorMine.ColorSpaces.Rgb kRgb = new ColorMine.ColorSpaces.Rgb(k.R, k.G, k.B);

            double delta = cRgb.Compare(kRgb, new ColorMine.ColorSpaces.Comparisons.Cie1976Comparison());

            log.Info("delta  :" + delta + " color : " + c + " and " + k);
            return(delta);
        }
Exemplo n.º 4
0
        // compare two Emgu CV colors using ColorMine, an API for C#
        public static int colorDifference(Bgr c1, Bgr c2)
        {
            var myRGB1 = new ColorMine.ColorSpaces.Rgb {
                R = c1.Red, G = c1.Green, B = c1.Blue
            };
            var myRGB2 = new ColorMine.ColorSpaces.Rgb {
                R = c2.Red, G = c2.Green, B = c2.Blue
            };

            return((int)myRGB1.Compare(myRGB2, new Cie1976Comparison()));
        }
Exemplo n.º 5
0
        /// <inheritdoc />
        public override void UpdateAndDraw(ControlBase control, TimeSpan time)
        {
            if (!(control is HueBarControl bar))
            {
                return;
            }
            if (!bar.IsDirty)
            {
                return;
            }

            control.Surface.Fill(Color.White, Color.Black, 0, null);

            bar._positions = control.Width;
            ColorGradient gradient = new ColorGradient(Color.Red, Color.Yellow, Color.Green, Color.Turquoise, Color.Blue, Color.Purple, Color.Red);

            for (int x = 0; x < control.Width; x++)
            {
                control.Surface[x, 0].Glyph      = 219;
                control.Surface[x, 0].Foreground = gradient.Lerp((float)x / (float)(control.Width - 1));
            }

            control.Surface[bar.SelectedPosition, 1].Glyph      = 30;
            control.Surface[bar.SelectedPosition, 1].Foreground = Color.LightGray;//this[_selectedPosition, 0].Foreground;

            // Build an array of all the colors
            Color[] colors = new Color[control.Width];
            for (int x = 0; x < control.Width; x++)
            {
                colors[x] = control.Surface[x, 0].Foreground;
            }

            List <int> colorIndexesFinished = new List <int>(control.Width);

            foreach (var stop in gradient.Stops)
            {
                ColorMine.ColorSpaces.Rgb rgbColorStop = new ColorMine.ColorSpaces.Rgb()
                {
                    R = stop.Color.R, G = stop.Color.G, B = stop.Color.B
                };
                Tuple <Color, double, int>[] colorWeights = new Tuple <Color, double, int> [control.Width];

                // Create a color weight for every cell compared to the color stop
                for (int x = 0; x < control.Width; x++)
                {
                    if (!colorIndexesFinished.Contains(x))
                    {
                        ColorMine.ColorSpaces.Rgb rgbColor = new ColorMine.ColorSpaces.Rgb()
                        {
                            R = colors[x].R, G = colors[x].G, B = colors[x].B
                        };
                        ColorMine.ColorSpaces.Cmy cmyColor = rgbColor.To <ColorMine.ColorSpaces.Cmy>();

                        colorWeights[x] = new Tuple <Color, double, int>(colors[x], rgbColorStop.Compare(cmyColor, new ColorMine.ColorSpaces.Comparisons.Cie1976Comparison()), x);
                    }
                    else
                    {
                        colorWeights[x] = new Tuple <Color, double, int>(colors[x], 10000, x);
                    }
                }

                var foundColor = colorWeights.OrderBy(t => t.Item2).First();

                control.Surface[foundColor.Item3, 0].Foreground = stop.Color;
                colorIndexesFinished.Add(foundColor.Item3);
            }



            control.IsDirty = false;
        }
Exemplo n.º 6
0
        /// <summary>
        /// Return best color match by computing the metric distance with the selected formula
        /// </summary>
        public static JToken GetNearestColor(string colorHex, JObject jColorList)
        {
            int colorR   = int.Parse(colorHex.Substring(1, 2), System.Globalization.NumberStyles.AllowHexSpecifier);
            int colorG   = int.Parse(colorHex.Substring(3, 2), System.Globalization.NumberStyles.AllowHexSpecifier);
            int colorB   = int.Parse(colorHex.Substring(5, 2), System.Globalization.NumberStyles.AllowHexSpecifier);
            var colorRgb = new ColorMine.ColorSpaces.Rgb {
                R = colorR, G = colorG, B = colorB
            };

            double bestDistance    = -1;
            JToken nearestColor    = null;
            string nearestColorHex = null;

            JObject hueColorsList = null;

            if (jColorList["Info"]["hasHueValues"].ToObject <bool>() == true && jColorList.ContainsKey("HueColors"))
            {
                hueColorsList = jColorList["HueColors"].ToObject <JObject>();
            }

            foreach (var item in jColorList["Colors"].ToObject <JObject>())
            {
                string itemColorHex = item.Key;
                if (string.Compare(item.Key, colorHex, true) == 0)
                {
                    bestDistance    = 0;
                    nearestColor    = item.Value;
                    nearestColorHex = item.Key;
                    break;
                }

                int nearestColorR = int.Parse(itemColorHex.Substring(1, 2), System.Globalization.NumberStyles.AllowHexSpecifier);
                int nearestColorG = int.Parse(itemColorHex.Substring(3, 2), System.Globalization.NumberStyles.AllowHexSpecifier);
                int nearestColorB = int.Parse(itemColorHex.Substring(5, 2), System.Globalization.NumberStyles.AllowHexSpecifier);
                var itemRgb       = new ColorMine.ColorSpaces.Rgb {
                    R = nearestColorR, G = nearestColorG, B = nearestColorB
                };

                // Space comparison formulas: https://en.wikipedia.org/wiki/Color_difference
                // Note: Delta-e calculations are quasimetric,
                //   the result of comparing color a to b isn't always equal to comparing color b to a
                //   but it will probably be pretty close
                double deltaE = colorRgb.Compare(itemRgb, Common.spaceComparison);

                if (bestDistance < 0 || bestDistance > deltaE)
                {
                    bestDistance    = deltaE;
                    nearestColor    = item.Value;
                    nearestColorHex = item.Key;
                }
            }

            // Add color info
            if (nearestColor != null)
            {
                nearestColor["hex"] = nearestColorHex;
                int nearestColorR = int.Parse(nearestColorHex.Substring(1, 2), System.Globalization.NumberStyles.AllowHexSpecifier);
                int nearestColorG = int.Parse(nearestColorHex.Substring(3, 2), System.Globalization.NumberStyles.AllowHexSpecifier);
                int nearestColorB = int.Parse(nearestColorHex.Substring(5, 2), System.Globalization.NumberStyles.AllowHexSpecifier);
                nearestColor["rgb"]      = string.Format("{0}, {1}, {2}", nearestColorR, nearestColorG, nearestColorB);
                nearestColor["distance"] = bestDistance;

                // Find Hue color info
                if (hueColorsList != null)
                {
                    string hueName = nearestColor["hueName"].ToString();
                    if (hueColorsList.ContainsKey(hueName) == true)
                    {
                        nearestColor["hueHex"] = hueColorsList[hueName]["hex"];
                    }
                }
            }
            return(nearestColor);
        }
Exemplo n.º 7
0
        private void SetClosestIndex(Color color)
        {
            ColorMine.ColorSpaces.Rgb rgbColorStop = new ColorMine.ColorSpaces.Rgb()
            {
                R = color.R, G = color.G, B = color.B
            };
            Tuple <Color, double, int>[] colorWeights = new Tuple <Color, double, int> [Width];

            // Create a color weight for every cell compared to the color stop
            for (int x = 0; x < Width; x++)
            {
                ColorMine.ColorSpaces.Rgb rgbColor = new ColorMine.ColorSpaces.Rgb()
                {
                    R = this[x, 0].Foreground.R, G = this[x, 0].Foreground.G, B = this[x, 0].Foreground.B
                };
                ColorMine.ColorSpaces.Cmy cmyColor = rgbColor.To <ColorMine.ColorSpaces.Cmy>();

                colorWeights[x] = new Tuple <Color, double, int>(this[x, 0].Foreground, rgbColorStop.Compare(cmyColor, new ColorMine.ColorSpaces.Comparisons.Cie1976Comparison()), x);
            }

            var foundColor = colorWeights.OrderBy(t => t.Item2).First();

            _selectedPosition = foundColor.Item3;
            this.IsDirty      = true;
        }
Exemplo n.º 8
-1
        // compare two Emgu CV colors using ColorMine, an API for C#
        public static int colorDifference(Bgr c1, Bgr c2)
        {
            var myRGB1 = new ColorMine.ColorSpaces.Rgb { R = c1.Red, G = c1.Green, B = c1.Blue };
            var myRGB2 = new ColorMine.ColorSpaces.Rgb { R = c2.Red, G = c2.Green, B = c2.Blue };

            return (int)myRGB1.Compare(myRGB2, new Cie1976Comparison());
        }
Exemplo n.º 9
-1
        private void SetClosestIndex(Color color)
        {
            ColorMine.ColorSpaces.Rgb rgbColorStop = new ColorMine.ColorSpaces.Rgb() { R = color.R, G = color.G, B = color.B };
            Tuple<Color, double, int>[] colorWeights = new Tuple<Color, double, int>[Width];

            // Create a color weight for every cell compared to the color stop
            for (int x = 0; x < Width; x++)
            {
                ColorMine.ColorSpaces.Rgb rgbColor = new ColorMine.ColorSpaces.Rgb() { R = this[x, 0].Foreground.R, G = this[x, 0].Foreground.G, B = this[x, 0].Foreground.B };
                ColorMine.ColorSpaces.Cmy cmyColor = rgbColor.To<ColorMine.ColorSpaces.Cmy>();

                colorWeights[x] = new Tuple<Color, double, int>(this[x, 0].Foreground, rgbColorStop.Compare(cmyColor, new ColorMine.ColorSpaces.Comparisons.Cie1976Comparison()), x);

            }

            var foundColor = colorWeights.OrderBy(t => t.Item2).First();
            _selectedPosition = foundColor.Item3;
            this.IsDirty = true;
        }
Exemplo n.º 10
-1
        public override void Compose()
        {
            if (this.IsDirty)
            {
                this.Fill(Color.White, Color.Black, 0, null);

                _positions = Width;
                ColorGradient gradient = new ColorGradient(Color.Red, Color.Yellow, Color.Green, Color.Turquoise, Color.Blue, Color.Purple, Color.Red);

                for (int x = 0; x < Width; x++)
                {
                    this[x, 0].GlyphIndex = 219;
                    this[x, 0].Foreground = gradient.Lerp((float)x / (float)(Width - 1));
                }

                this[_selectedPosition, 1].GlyphIndex = 30;
                this[_selectedPosition, 1].Foreground = Color.LightGray;//this[_selectedPosition, 0].Foreground;

                // Build an array of all the colors
                Color[] colors = new Color[Width];
                for (int x = 0; x < Width; x++)
                    colors[x] = this[x, 0].Foreground;

                List<int> colorIndexesFinished = new List<int>(Width);

                foreach (var stop in gradient.Stops)
                {
                    ColorMine.ColorSpaces.Rgb rgbColorStop = new ColorMine.ColorSpaces.Rgb() { R = stop.Color.R, G = stop.Color.G, B = stop.Color.B };
                    Tuple<Color, double, int>[] colorWeights = new Tuple<Color, double, int>[Width];

                    // Create a color weight for every cell compared to the color stop
                    for (int x = 0; x < Width; x++)
                    {
                        if (!colorIndexesFinished.Contains(x))
                        {
                            ColorMine.ColorSpaces.Rgb rgbColor = new ColorMine.ColorSpaces.Rgb() { R = colors[x].R, G = colors[x].G, B = colors[x].B };
                            ColorMine.ColorSpaces.Cmy cmyColor = rgbColor.To<ColorMine.ColorSpaces.Cmy>();

                            colorWeights[x] = new Tuple<Color, double, int>(colors[x], rgbColorStop.Compare(cmyColor, new ColorMine.ColorSpaces.Comparisons.Cie1976Comparison()), x);
                        }
                        else
                            colorWeights[x] = new Tuple<Color, double, int>(colors[x], 10000, x);
                    }

                    var foundColor = colorWeights.OrderBy(t => t.Item2).First();

                    this[foundColor.Item3, 0].Foreground = stop.Color;
                    colorIndexesFinished.Add(foundColor.Item3);
                }

                this.IsDirty = false;
            }
        }
Exemplo n.º 11
-1
        private void SetClosestIndex(Color color)
        {
            ColorMine.ColorSpaces.Rgb rgbColorStop = new ColorMine.ColorSpaces.Rgb() { R = color.R, G = color.G, B = color.B };
            Tuple<Color, double, int>[] colorWeights = new Tuple<Color, double, int>[textSurface.Cells.Length];

            // Create a color weight for every cell compared to the color stop
            for (int x = 0; x < textSurface.Cells.Length; x++)
            {
                ColorMine.ColorSpaces.Rgb rgbColor = new ColorMine.ColorSpaces.Rgb() { R = this[x].Background.R, G = this[x].Background.G, B = this[x].Background.B };
                ColorMine.ColorSpaces.Cmy cmyColor = rgbColor.To<ColorMine.ColorSpaces.Cmy>();

                colorWeights[x] = new Tuple<Color, double, int>(this[x].Background, rgbColorStop.Compare(cmyColor, new ColorMine.ColorSpaces.Comparisons.Cie1976Comparison()), x);

            }

            var foundColor = colorWeights.OrderBy(t => t.Item2).First();

            this[_selectedColorPosition.X, _selectedColorPosition.Y].GlyphIndex = 0;
            _selectedColorPosition = SadConsole.Consoles.TextSurface.GetPointFromIndex(foundColor.Item3, Width);
            this[_selectedColorPosition.X, _selectedColorPosition.Y].GlyphIndex = 4;

            this.IsDirty = true;
        }