コード例 #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> [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;
        }
コード例 #2
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;
        }
コード例 #3
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;
        }