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); } }
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); } }
public Rgba32 GetTextColor(Rgba32 background) { var hsl = _converter.ToHsl(background); return(_converter.ToRgb(new Hsl(hsl.H, hsl.S, hsl.L switch {
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); } }
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); } }
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); } }
/// <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); }
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); }
/// <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); }