コード例 #1
0
        public void Convert_CieXyy_to_Hsl(float x, float y, float yl, float h, float s, float l)
        {
            // Arrange
            var input    = new CieXyy(x, y, yl);
            var expected = new Hsl(h, s, l);

            Span <CieXyy> inputSpan = new CieXyy[5];

            inputSpan.Fill(input);

            Span <Hsl> actualSpan = new Hsl[5];

            // Act
            var actual = Converter.ToHsl(input);

            Converter.Convert(inputSpan, actualSpan);

            // Assert
            Assert.Equal(expected, actual, ColorSpaceComparer);

            for (int i = 0; i < actualSpan.Length; i++)
            {
                Assert.Equal(expected, actualSpan[i], ColorSpaceComparer);
            }
        }
コード例 #2
0
        public void Convert_Rgb_To_Hsl(float r, float g, float b, float h, float s, float l)
        {
            // Arrange
            var input    = new Rgb(r, g, b);
            var expected = new Hsl(h, s, l);


            Span <Rgb> inputSpan = new Rgb[5];

            inputSpan.Fill(input);

            Span <Hsl> actualSpan = new Hsl[5];

            // Act
            var actual = Converter.ToHsl(input);

            Converter.Convert(inputSpan, actualSpan);

            // Assert
            Assert.Equal(expected, actual, ColorSpaceComparer);

            for (int i = 0; i < actualSpan.Length; i++)
            {
                Assert.Equal(expected, actualSpan[i], ColorSpaceComparer);
            }
        }
コード例 #3
0
        public Rgba32 GetTextColor(Rgba32 background)
        {
            var hsl = _converter.ToHsl(background);

            return(_converter.ToRgb(new Hsl(hsl.H, hsl.S,
                                            hsl.L switch
            {
コード例 #4
0
        public void Convert_CieLch_to_Hsl(float l, float c, float h, float h2, float s, float l2)
        {
            // Arrange
            var input    = new CieLch(l, c, h);
            var expected = new Hsl(h2, s, l2);

            Span <CieLch> inputSpan = new CieLch[5];

            inputSpan.Fill(input);

            Span <Hsl> actualSpan = new Hsl[5];

            // Act
            var actual = Converter.ToHsl(input);

            Converter.Convert(inputSpan, actualSpan);

            // Assert
            Assert.Equal(expected, actual, ColorSpaceComparer);

            for (int i = 0; i < actualSpan.Length; i++)
            {
                Assert.Equal(expected, actualSpan[i], ColorSpaceComparer);
            }
        }
コード例 #5
0
        public void Convert_CieLab_to_Hsl(float l, float a, float b, float h, float s, float ll)
        {
            // Arrange
            var input    = new CieLab(l, a, b);
            var expected = new Hsl(h, s, ll);

            Span <CieLab> inputSpan = new CieLab[5];

            inputSpan.Fill(input);

            Span <Hsl> actualSpan = new Hsl[5];

            // Act
            var actual = Converter.ToHsl(input);

            Converter.Convert(inputSpan, actualSpan, actualSpan.Length);

            // Assert
            Assert.Equal(expected, actual, ColorSpaceComparer);

            for (int i = 0; i < actualSpan.Length; i++)
            {
                Assert.Equal(expected, actualSpan[i], ColorSpaceComparer);
            }
        }
コード例 #6
0
        public void Convert_Cmyk_to_Hsl(float c, float m, float y, float k, float h, float s, float l)
        {
            // Arrange
            var input    = new Cmyk(c, m, y, k);
            var expected = new Hsl(h, s, l);

            Span <Cmyk> inputSpan = new Cmyk[5];

            inputSpan.Fill(input);

            Span <Hsl> actualSpan = new Hsl[5];

            // Act
            var actual = Converter.ToHsl(input);

            Converter.Convert(inputSpan, actualSpan, actualSpan.Length);

            // Assert
            Assert.Equal(expected, actual, ColorSpaceComparer);

            for (int i = 0; i < actualSpan.Length; i++)
            {
                Assert.Equal(expected, actualSpan[i], ColorSpaceComparer);
            }
        }
コード例 #7
0
        /// <summary>
        ///     Applies a tint to an image.
        /// </summary>
        public static void Tint(this Image <Rgba32> image, Color colour)
        {
            var tint      = colour.ToPixel <Rgba32>();
            var lightness = 2 * (1 - (Converter.ToHsl(tint).L * 2 - 1));

            var operation = new TintRowOperation(image, tint, lightness);

            ParallelRowIterator.IterateRows(Configuration.Default, image.Bounds(), in operation);
        }
コード例 #8
0
        public void Convert_Rgb_To_Hsl(float r, float g, float b, float h, float s, float l)
        {
            // Arrange
            Rgb input = new Rgb(r, g, b);

            // Act
            Hsl output = Converter.ToHsl(input);

            // Assert
            Assert.Equal(h, output.H, FloatRoundingComparer);
            Assert.Equal(s, output.S, FloatRoundingComparer);
            Assert.Equal(l, output.L, FloatRoundingComparer);
        }
コード例 #9
0
ファイル: PicToAscii.cs プロジェクト: nikvoronin/Asceils
        /// <summary>
        /// Returns a list of the colored string chunks
        /// </summary>
        /// <param name="source">Bitmap source image</param>
        /// <param name="width">Result width in symbols</param>
        /// <param name="height">Result height in symbols</param>
        /// <returns>Colored tapes ready to print to the console</returns>
        private IReadOnlyList <ColorTape> ConvertInternal(Image <Rgb24> source, int width, int height)
        {
            using var reduced = source.Clone(x => x.Resize(width, height, Options.Resampler));

            var chunks = new List <ColorTape>();

            StringBuilder chunkBuilder = new StringBuilder();
            ConsoleColor  lastColor    = ConsoleColor.Black;

            for (int y = 0; y < reduced.Height; y++)
            {
                ReadOnlySpan <Rgb24> row = reduced.GetPixelRowSpan(y);

                foreach (var rgb in row)
                {
                    ConsoleColor cc = ToConsoleColor(rgb);

                    if (lastColor != cc)
                    {
                        if (chunkBuilder.Length > 0)
                        {
                            var tape = new ColorTape(chunkBuilder.ToString(), lastColor);
                            chunks.Add(tape);

                            chunkBuilder.Clear();
                        }

                        lastColor = cc;
                    }

                    float bright = _colorSpaceConvert.ToHsl(rgb).L;
                    char  symbol = BrightnessToChar(bright, Options.AsciiTable);
                    chunkBuilder.Append(symbol);
                }

                chunkBuilder.Append(Environment.NewLine);
            }

            if (chunkBuilder.Length > 0)
            {
                chunks.Add(new ColorTape(chunkBuilder.ToString(), lastColor));
            }

            return(chunks);
        }