Browse Source

Add new parsing methods. Fix #1103

af/octree-no-pixelmap
James Jackson-South 6 years ago
parent
commit
93a6cc092f
  1. 200
      src/ImageSharp/Color/Color.NamedColors.cs
  2. 222
      src/ImageSharp/Color/Color.WernerPalette.cs
  3. 82
      src/ImageSharp/Color/Color.cs
  4. 220
      src/ImageSharp/PixelFormats/ColorConstants.cs
  5. 39
      src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.Definitions.cs
  6. 35
      src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.cs
  7. 2
      src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.cs
  8. 78
      tests/ImageSharp.Tests/Color/ColorTests.cs
  9. 376
      tests/ImageSharp.Tests/Color/ReferencePalette.cs
  10. 16
      tests/ImageSharp.Tests/PixelFormats/Rgba32Tests.cs
  11. 2
      tests/ImageSharp.Tests/PixelFormats/UnPackedPixelTests.cs

200
src/ImageSharp/Color/Color.NamedColors.cs

@ -1,6 +1,9 @@
// Copyright (c) Six Labors and contributors. // Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System;
using System.Collections.Generic;
namespace SixLabors.ImageSharp namespace SixLabors.ImageSharp
{ {
/// <content> /// <content>
@ -8,6 +11,8 @@ namespace SixLabors.ImageSharp
/// </content> /// </content>
public readonly partial struct Color public readonly partial struct Color
{ {
private static readonly Lazy<Dictionary<string, Color>> NamedColorsLookupLazy = new Lazy<Dictionary<string, Color>>(CreateNamedColorsLookup, true);
/// <summary> /// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #F0F8FF. /// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #F0F8FF.
/// </summary> /// </summary>
@ -111,7 +116,7 @@ namespace SixLabors.ImageSharp
/// <summary> /// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #00FFFF. /// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #00FFFF.
/// </summary> /// </summary>
public static readonly Color Cyan = FromRgba(0, 255, 255, 255); public static readonly Color Cyan = Aqua;
/// <summary> /// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #00008B. /// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #00008B.
@ -138,6 +143,11 @@ namespace SixLabors.ImageSharp
/// </summary> /// </summary>
public static readonly Color DarkGreen = FromRgba(0, 100, 0, 255); public static readonly Color DarkGreen = FromRgba(0, 100, 0, 255);
/// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #A9A9A9.
/// </summary>
public static readonly Color DarkGrey = DarkGray;
/// <summary> /// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #BDB76B. /// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #BDB76B.
/// </summary> /// </summary>
@ -188,6 +198,11 @@ namespace SixLabors.ImageSharp
/// </summary> /// </summary>
public static readonly Color DarkSlateGray = FromRgba(47, 79, 79, 255); public static readonly Color DarkSlateGray = FromRgba(47, 79, 79, 255);
/// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #2F4F4F.
/// </summary>
public static readonly Color DarkSlateGrey = DarkSlateGray;
/// <summary> /// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #00CED1. /// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #00CED1.
/// </summary> /// </summary>
@ -213,6 +228,11 @@ namespace SixLabors.ImageSharp
/// </summary> /// </summary>
public static readonly Color DimGray = FromRgba(105, 105, 105, 255); public static readonly Color DimGray = FromRgba(105, 105, 105, 255);
/// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #696969.
/// </summary>
public static readonly Color DimGrey = DimGray;
/// <summary> /// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #1E90FF. /// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #1E90FF.
/// </summary> /// </summary>
@ -273,6 +293,11 @@ namespace SixLabors.ImageSharp
/// </summary> /// </summary>
public static readonly Color GreenYellow = FromRgba(173, 255, 47, 255); public static readonly Color GreenYellow = FromRgba(173, 255, 47, 255);
/// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #808080.
/// </summary>
public static readonly Color Grey = Gray;
/// <summary> /// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #F0FFF0. /// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #F0FFF0.
/// </summary> /// </summary>
@ -353,6 +378,11 @@ namespace SixLabors.ImageSharp
/// </summary> /// </summary>
public static readonly Color LightGreen = FromRgba(144, 238, 144, 255); public static readonly Color LightGreen = FromRgba(144, 238, 144, 255);
/// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #D3D3D3.
/// </summary>
public static readonly Color LightGrey = LightGray;
/// <summary> /// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #FFB6C1. /// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #FFB6C1.
/// </summary> /// </summary>
@ -378,6 +408,11 @@ namespace SixLabors.ImageSharp
/// </summary> /// </summary>
public static readonly Color LightSlateGray = FromRgba(119, 136, 153, 255); public static readonly Color LightSlateGray = FromRgba(119, 136, 153, 255);
/// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #778899.
/// </summary>
public static readonly Color LightSlateGrey = LightSlateGray;
/// <summary> /// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #B0C4DE. /// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #B0C4DE.
/// </summary> /// </summary>
@ -406,7 +441,7 @@ namespace SixLabors.ImageSharp
/// <summary> /// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #FF00FF. /// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #FF00FF.
/// </summary> /// </summary>
public static readonly Color Magenta = FromRgba(255, 0, 255, 255); public static readonly Color Magenta = Fuchsia;
/// <summary> /// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #800000. /// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #800000.
@ -643,6 +678,11 @@ namespace SixLabors.ImageSharp
/// </summary> /// </summary>
public static readonly Color SlateGray = FromRgba(112, 128, 144, 255); public static readonly Color SlateGray = FromRgba(112, 128, 144, 255);
/// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #708090.
/// </summary>
public static readonly Color SlateGrey = SlateGray;
/// <summary> /// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #FFFAFA. /// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #FFFAFA.
/// </summary> /// </summary>
@ -717,5 +757,161 @@ namespace SixLabors.ImageSharp
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #9ACD32. /// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #9ACD32.
/// </summary> /// </summary>
public static readonly Color YellowGreen = FromRgba(154, 205, 50, 255); public static readonly Color YellowGreen = FromRgba(154, 205, 50, 255);
private static Dictionary<string, Color> CreateNamedColorsLookup()
{
return new Dictionary<string, Color>(StringComparer.OrdinalIgnoreCase)
{
{ nameof(AliceBlue), AliceBlue },
{ nameof(AntiqueWhite), AntiqueWhite },
{ nameof(Aqua), Aqua },
{ nameof(Aquamarine), Aquamarine },
{ nameof(Azure), Azure },
{ nameof(Beige), Beige },
{ nameof(Bisque), Bisque },
{ nameof(Black), Black },
{ nameof(BlanchedAlmond), BlanchedAlmond },
{ nameof(Blue), Blue },
{ nameof(BlueViolet), BlueViolet },
{ nameof(Brown), Brown },
{ nameof(BurlyWood), BurlyWood },
{ nameof(CadetBlue), CadetBlue },
{ nameof(Chartreuse), Chartreuse },
{ nameof(Chocolate), Chocolate },
{ nameof(Coral), Coral },
{ nameof(CornflowerBlue), CornflowerBlue },
{ nameof(Cornsilk), Cornsilk },
{ nameof(Crimson), Crimson },
{ nameof(Cyan), Cyan },
{ nameof(DarkBlue), DarkBlue },
{ nameof(DarkCyan), DarkCyan },
{ nameof(DarkGoldenrod), DarkGoldenrod },
{ nameof(DarkGray), DarkGray },
{ nameof(DarkGreen), DarkGreen },
{ nameof(DarkGrey), DarkGrey },
{ nameof(DarkKhaki), DarkKhaki },
{ nameof(DarkMagenta), DarkMagenta },
{ nameof(DarkOliveGreen), DarkOliveGreen },
{ nameof(DarkOrange), DarkOrange },
{ nameof(DarkOrchid), DarkOrchid },
{ nameof(DarkRed), DarkRed },
{ nameof(DarkSalmon), DarkSalmon },
{ nameof(DarkSeaGreen), DarkSeaGreen },
{ nameof(DarkSlateBlue), DarkSlateBlue },
{ nameof(DarkSlateGray), DarkSlateGray },
{ nameof(DarkSlateGrey), DarkSlateGrey },
{ nameof(DarkTurquoise), DarkTurquoise },
{ nameof(DarkViolet), DarkViolet },
{ nameof(DeepPink), DeepPink },
{ nameof(DeepSkyBlue), DeepSkyBlue },
{ nameof(DimGray), DimGray },
{ nameof(DimGrey), DimGrey },
{ nameof(DodgerBlue), DodgerBlue },
{ nameof(Firebrick), Firebrick },
{ nameof(FloralWhite), FloralWhite },
{ nameof(ForestGreen), ForestGreen },
{ nameof(Fuchsia), Fuchsia },
{ nameof(Gainsboro), Gainsboro },
{ nameof(GhostWhite), GhostWhite },
{ nameof(Gold), Gold },
{ nameof(Goldenrod), Goldenrod },
{ nameof(Gray), Gray },
{ nameof(Green), Green },
{ nameof(GreenYellow), GreenYellow },
{ nameof(Grey), Grey },
{ nameof(Honeydew), Honeydew },
{ nameof(HotPink), HotPink },
{ nameof(IndianRed), IndianRed },
{ nameof(Indigo), Indigo },
{ nameof(Ivory), Ivory },
{ nameof(Khaki), Khaki },
{ nameof(Lavender), Lavender },
{ nameof(LavenderBlush), LavenderBlush },
{ nameof(LawnGreen), LawnGreen },
{ nameof(LemonChiffon), LemonChiffon },
{ nameof(LightBlue), LightBlue },
{ nameof(LightCoral), LightCoral },
{ nameof(LightCyan), LightCyan },
{ nameof(LightGoldenrodYellow), LightGoldenrodYellow },
{ nameof(LightGray), LightGray },
{ nameof(LightGreen), LightGreen },
{ nameof(LightGrey), LightGrey },
{ nameof(LightPink), LightPink },
{ nameof(LightSalmon), LightSalmon },
{ nameof(LightSeaGreen), LightSeaGreen },
{ nameof(LightSkyBlue), LightSkyBlue },
{ nameof(LightSlateGray), LightSlateGray },
{ nameof(LightSlateGrey), LightSlateGrey },
{ nameof(LightSteelBlue), LightSteelBlue },
{ nameof(LightYellow), LightYellow },
{ nameof(Lime), Lime },
{ nameof(LimeGreen), LimeGreen },
{ nameof(Linen), Linen },
{ nameof(Magenta), Magenta },
{ nameof(Maroon), Maroon },
{ nameof(MediumAquamarine), MediumAquamarine },
{ nameof(MediumBlue), MediumBlue },
{ nameof(MediumOrchid), MediumOrchid },
{ nameof(MediumPurple), MediumPurple },
{ nameof(MediumSeaGreen), MediumSeaGreen },
{ nameof(MediumSlateBlue), MediumSlateBlue },
{ nameof(MediumSpringGreen), MediumSpringGreen },
{ nameof(MediumTurquoise), MediumTurquoise },
{ nameof(MediumVioletRed), MediumVioletRed },
{ nameof(MidnightBlue), MidnightBlue },
{ nameof(MintCream), MintCream },
{ nameof(MistyRose), MistyRose },
{ nameof(Moccasin), Moccasin },
{ nameof(NavajoWhite), NavajoWhite },
{ nameof(Navy), Navy },
{ nameof(OldLace), OldLace },
{ nameof(Olive), Olive },
{ nameof(OliveDrab), OliveDrab },
{ nameof(Orange), Orange },
{ nameof(OrangeRed), OrangeRed },
{ nameof(Orchid), Orchid },
{ nameof(PaleGoldenrod), PaleGoldenrod },
{ nameof(PaleGreen), PaleGreen },
{ nameof(PaleTurquoise), PaleTurquoise },
{ nameof(PaleVioletRed), PaleVioletRed },
{ nameof(PapayaWhip), PapayaWhip },
{ nameof(PeachPuff), PeachPuff },
{ nameof(Peru), Peru },
{ nameof(Pink), Pink },
{ nameof(Plum), Plum },
{ nameof(PowderBlue), PowderBlue },
{ nameof(Purple), Purple },
{ nameof(RebeccaPurple), RebeccaPurple },
{ nameof(Red), Red },
{ nameof(RosyBrown), RosyBrown },
{ nameof(RoyalBlue), RoyalBlue },
{ nameof(SaddleBrown), SaddleBrown },
{ nameof(Salmon), Salmon },
{ nameof(SandyBrown), SandyBrown },
{ nameof(SeaGreen), SeaGreen },
{ nameof(SeaShell), SeaShell },
{ nameof(Sienna), Sienna },
{ nameof(Silver), Silver },
{ nameof(SkyBlue), SkyBlue },
{ nameof(SlateBlue), SlateBlue },
{ nameof(SlateGray), SlateGray },
{ nameof(SlateGrey), SlateGrey },
{ nameof(Snow), Snow },
{ nameof(SpringGreen), SpringGreen },
{ nameof(SteelBlue), SteelBlue },
{ nameof(Tan), Tan },
{ nameof(Teal), Teal },
{ nameof(Thistle), Thistle },
{ nameof(Tomato), Tomato },
{ nameof(Transparent), Transparent },
{ nameof(Turquoise), Turquoise },
{ nameof(Violet), Violet },
{ nameof(Wheat), Wheat },
{ nameof(White), White },
{ nameof(WhiteSmoke), WhiteSmoke },
{ nameof(Yellow), Yellow },
{ nameof(YellowGreen), YellowGreen }
};
}
} }
} }

222
src/ImageSharp/Color/Color.WernerPalette.cs

@ -20,116 +20,116 @@ namespace SixLabors.ImageSharp
private static Color[] CreateWernerPalette() => new[] private static Color[] CreateWernerPalette() => new[]
{ {
FromHex("#f1e9cd"), ParseHex("#f1e9cd"),
FromHex("#f2e7cf"), ParseHex("#f2e7cf"),
FromHex("#ece6d0"), ParseHex("#ece6d0"),
FromHex("#f2eacc"), ParseHex("#f2eacc"),
FromHex("#f3e9ca"), ParseHex("#f3e9ca"),
FromHex("#f2ebcd"), ParseHex("#f2ebcd"),
FromHex("#e6e1c9"), ParseHex("#e6e1c9"),
FromHex("#e2ddc6"), ParseHex("#e2ddc6"),
FromHex("#cbc8b7"), ParseHex("#cbc8b7"),
FromHex("#bfbbb0"), ParseHex("#bfbbb0"),
FromHex("#bebeb3"), ParseHex("#bebeb3"),
FromHex("#b7b5ac"), ParseHex("#b7b5ac"),
FromHex("#bab191"), ParseHex("#bab191"),
FromHex("#9c9d9a"), ParseHex("#9c9d9a"),
FromHex("#8a8d84"), ParseHex("#8a8d84"),
FromHex("#5b5c61"), ParseHex("#5b5c61"),
FromHex("#555152"), ParseHex("#555152"),
FromHex("#413f44"), ParseHex("#413f44"),
FromHex("#454445"), ParseHex("#454445"),
FromHex("#423937"), ParseHex("#423937"),
FromHex("#433635"), ParseHex("#433635"),
FromHex("#252024"), ParseHex("#252024"),
FromHex("#241f20"), ParseHex("#241f20"),
FromHex("#281f3f"), ParseHex("#281f3f"),
FromHex("#1c1949"), ParseHex("#1c1949"),
FromHex("#4f638d"), ParseHex("#4f638d"),
FromHex("#383867"), ParseHex("#383867"),
FromHex("#5c6b8f"), ParseHex("#5c6b8f"),
FromHex("#657abb"), ParseHex("#657abb"),
FromHex("#6f88af"), ParseHex("#6f88af"),
FromHex("#7994b5"), ParseHex("#7994b5"),
FromHex("#6fb5a8"), ParseHex("#6fb5a8"),
FromHex("#719ba2"), ParseHex("#719ba2"),
FromHex("#8aa1a6"), ParseHex("#8aa1a6"),
FromHex("#d0d5d3"), ParseHex("#d0d5d3"),
FromHex("#8590ae"), ParseHex("#8590ae"),
FromHex("#3a2f52"), ParseHex("#3a2f52"),
FromHex("#39334a"), ParseHex("#39334a"),
FromHex("#6c6d94"), ParseHex("#6c6d94"),
FromHex("#584c77"), ParseHex("#584c77"),
FromHex("#533552"), ParseHex("#533552"),
FromHex("#463759"), ParseHex("#463759"),
FromHex("#bfbac0"), ParseHex("#bfbac0"),
FromHex("#77747f"), ParseHex("#77747f"),
FromHex("#4a475c"), ParseHex("#4a475c"),
FromHex("#b8bfaf"), ParseHex("#b8bfaf"),
FromHex("#b2b599"), ParseHex("#b2b599"),
FromHex("#979c84"), ParseHex("#979c84"),
FromHex("#5d6161"), ParseHex("#5d6161"),
FromHex("#61ac86"), ParseHex("#61ac86"),
FromHex("#a4b6a7"), ParseHex("#a4b6a7"),
FromHex("#adba98"), ParseHex("#adba98"),
FromHex("#93b778"), ParseHex("#93b778"),
FromHex("#7d8c55"), ParseHex("#7d8c55"),
FromHex("#33431e"), ParseHex("#33431e"),
FromHex("#7c8635"), ParseHex("#7c8635"),
FromHex("#8e9849"), ParseHex("#8e9849"),
FromHex("#c2c190"), ParseHex("#c2c190"),
FromHex("#67765b"), ParseHex("#67765b"),
FromHex("#ab924b"), ParseHex("#ab924b"),
FromHex("#c8c76f"), ParseHex("#c8c76f"),
FromHex("#ccc050"), ParseHex("#ccc050"),
FromHex("#ebdd99"), ParseHex("#ebdd99"),
FromHex("#ab9649"), ParseHex("#ab9649"),
FromHex("#dbc364"), ParseHex("#dbc364"),
FromHex("#e6d058"), ParseHex("#e6d058"),
FromHex("#ead665"), ParseHex("#ead665"),
FromHex("#d09b2c"), ParseHex("#d09b2c"),
FromHex("#a36629"), ParseHex("#a36629"),
FromHex("#a77d35"), ParseHex("#a77d35"),
FromHex("#f0d696"), ParseHex("#f0d696"),
FromHex("#d7c485"), ParseHex("#d7c485"),
FromHex("#f1d28c"), ParseHex("#f1d28c"),
FromHex("#efcc83"), ParseHex("#efcc83"),
FromHex("#f3daa7"), ParseHex("#f3daa7"),
FromHex("#dfa837"), ParseHex("#dfa837"),
FromHex("#ebbc71"), ParseHex("#ebbc71"),
FromHex("#d17c3f"), ParseHex("#d17c3f"),
FromHex("#92462f"), ParseHex("#92462f"),
FromHex("#be7249"), ParseHex("#be7249"),
FromHex("#bb603c"), ParseHex("#bb603c"),
FromHex("#c76b4a"), ParseHex("#c76b4a"),
FromHex("#a75536"), ParseHex("#a75536"),
FromHex("#b63e36"), ParseHex("#b63e36"),
FromHex("#b5493a"), ParseHex("#b5493a"),
FromHex("#cd6d57"), ParseHex("#cd6d57"),
FromHex("#711518"), ParseHex("#711518"),
FromHex("#e9c49d"), ParseHex("#e9c49d"),
FromHex("#eedac3"), ParseHex("#eedac3"),
FromHex("#eecfbf"), ParseHex("#eecfbf"),
FromHex("#ce536b"), ParseHex("#ce536b"),
FromHex("#b74a70"), ParseHex("#b74a70"),
FromHex("#b7757c"), ParseHex("#b7757c"),
FromHex("#612741"), ParseHex("#612741"),
FromHex("#7a4848"), ParseHex("#7a4848"),
FromHex("#3f3033"), ParseHex("#3f3033"),
FromHex("#8d746f"), ParseHex("#8d746f"),
FromHex("#4d3635"), ParseHex("#4d3635"),
FromHex("#6e3b31"), ParseHex("#6e3b31"),
FromHex("#864735"), ParseHex("#864735"),
FromHex("#553d3a"), ParseHex("#553d3a"),
FromHex("#613936"), ParseHex("#613936"),
FromHex("#7a4b3a"), ParseHex("#7a4b3a"),
FromHex("#946943"), ParseHex("#946943"),
FromHex("#c39e6d"), ParseHex("#c39e6d"),
FromHex("#513e32"), ParseHex("#513e32"),
FromHex("#8b7859"), ParseHex("#8b7859"),
FromHex("#9b856b"), ParseHex("#9b856b"),
FromHex("#766051"), ParseHex("#766051"),
FromHex("#453b32") ParseHex("#453b32")
}; };
} }
} }

82
src/ImageSharp/Color/Color.cs

@ -95,21 +95,93 @@ namespace SixLabors.ImageSharp
public static Color FromRgb(byte r, byte g, byte b) => new Color(r, g, b); public static Color FromRgb(byte r, byte g, byte b) => new Color(r, g, b);
/// <summary> /// <summary>
/// Creates a new <see cref="Color"/> instance from the string representing a color in hexadecimal form. /// Creates a new instance of the <see cref="Color"/> struct
/// from the given hexadecimal string.
/// </summary> /// </summary>
/// <param name="hex"> /// <param name="hex">
/// The hexadecimal representation of the combined color components arranged /// The hexadecimal representation of the combined color components arranged
/// in rgb, rgba, rrggbb, or rrggbbaa format to match web syntax. /// in rgb, rgba, rrggbb, or rrggbbaa format to match web syntax.
/// </param> /// </param>
/// <returns>Returns a <see cref="Color"/> that represents the color defined by the provided RGBA hex string.</returns> /// <returns>
/// The <see cref="Color"/>.
/// </returns>
[MethodImpl(InliningOptions.ShortMethod)] [MethodImpl(InliningOptions.ShortMethod)]
public static Color FromHex(string hex) public static Color ParseHex(string hex)
{ {
var rgba = Rgba32.FromHex(hex); var rgba = Rgba32.ParseHex(hex);
return new Color(rgba); return new Color(rgba);
} }
/// <summary>
/// Attempts to creates a new instance of the <see cref="Color"/> struct
/// from the given hexadecimal string.
/// </summary>
/// <param name="hex">
/// The hexadecimal representation of the combined color components arranged
/// in rgb, rgba, rrggbb, or rrggbbaa format to match web syntax.
/// </param>
/// <param name="result">When this method returns, contains the <see cref="Color"/> equivalent of the hexadecimal input.</param>
/// <returns>
/// The <see cref="bool"/>.
/// </returns>
[MethodImpl(InliningOptions.ShortMethod)]
public static bool TryParseHex(string hex, out Color result)
{
result = default;
if (Rgba32.TryParseHex(hex, out Rgba32 rgba))
{
result = new Color(rgba);
return true;
}
return false;
}
/// <summary>
/// Creates a new instance of the <see cref="Color"/> struct
/// from the given input string.
/// </summary>
/// <param name="input">
/// The name of the color or the hexadecimal representation of the combined color components arranged
/// in rgb, rgba, rrggbb, or rrggbbaa format to match web syntax.
/// </param>
/// <returns>
/// The <see cref="Color"/>.
/// </returns>
public static Color Parse(string input)
{
if (!TryParse(input, out Color color))
{
throw new ArgumentException("Input string is not in the correct format.", nameof(input));
}
return color;
}
/// <summary>
/// Attempts to creates a new instance of the <see cref="Color"/> struct
/// from the given input string.
/// </summary>
/// <param name="input">
/// The name of the color or the hexadecimal representation of the combined color components arranged
/// in rgb, rgba, rrggbb, or rrggbbaa format to match web syntax.
/// </param>
/// <param name="result">When this method returns, contains the <see cref="Color"/> equivalent of the hexadecimal input.</param>
/// <returns>
/// The <see cref="bool"/>.
/// </returns>
public static bool TryParse(string input, out Color result)
{
if (NamedColorsLookupLazy.Value.TryGetValue(input, out result))
{
return true;
}
return TryParseHex(input, out result);
}
/// <summary> /// <summary>
/// Alters the alpha channel of the color, returning a new instance. /// Alters the alpha channel of the color, returning a new instance.
/// </summary> /// </summary>
@ -117,7 +189,7 @@ namespace SixLabors.ImageSharp
/// <returns>The color having it's alpha channel altered.</returns> /// <returns>The color having it's alpha channel altered.</returns>
public Color WithAlpha(float alpha) public Color WithAlpha(float alpha)
{ {
Vector4 v = (Vector4)this; var v = (Vector4)this;
v.W = alpha; v.W = alpha;
return new Color(v); return new Color(v);
} }

220
src/ImageSharp/PixelFormats/ColorConstants.cs

@ -163,116 +163,116 @@ namespace SixLabors.ImageSharp.PixelFormats
/// </summary> /// </summary>
public static readonly Rgba32[] WernerColors = public static readonly Rgba32[] WernerColors =
{ {
Rgba32.FromHex("#f1e9cd"), Rgba32.ParseHex("#f1e9cd"),
Rgba32.FromHex("#f2e7cf"), Rgba32.ParseHex("#f2e7cf"),
Rgba32.FromHex("#ece6d0"), Rgba32.ParseHex("#ece6d0"),
Rgba32.FromHex("#f2eacc"), Rgba32.ParseHex("#f2eacc"),
Rgba32.FromHex("#f3e9ca"), Rgba32.ParseHex("#f3e9ca"),
Rgba32.FromHex("#f2ebcd"), Rgba32.ParseHex("#f2ebcd"),
Rgba32.FromHex("#e6e1c9"), Rgba32.ParseHex("#e6e1c9"),
Rgba32.FromHex("#e2ddc6"), Rgba32.ParseHex("#e2ddc6"),
Rgba32.FromHex("#cbc8b7"), Rgba32.ParseHex("#cbc8b7"),
Rgba32.FromHex("#bfbbb0"), Rgba32.ParseHex("#bfbbb0"),
Rgba32.FromHex("#bebeb3"), Rgba32.ParseHex("#bebeb3"),
Rgba32.FromHex("#b7b5ac"), Rgba32.ParseHex("#b7b5ac"),
Rgba32.FromHex("#bab191"), Rgba32.ParseHex("#bab191"),
Rgba32.FromHex("#9c9d9a"), Rgba32.ParseHex("#9c9d9a"),
Rgba32.FromHex("#8a8d84"), Rgba32.ParseHex("#8a8d84"),
Rgba32.FromHex("#5b5c61"), Rgba32.ParseHex("#5b5c61"),
Rgba32.FromHex("#555152"), Rgba32.ParseHex("#555152"),
Rgba32.FromHex("#413f44"), Rgba32.ParseHex("#413f44"),
Rgba32.FromHex("#454445"), Rgba32.ParseHex("#454445"),
Rgba32.FromHex("#423937"), Rgba32.ParseHex("#423937"),
Rgba32.FromHex("#433635"), Rgba32.ParseHex("#433635"),
Rgba32.FromHex("#252024"), Rgba32.ParseHex("#252024"),
Rgba32.FromHex("#241f20"), Rgba32.ParseHex("#241f20"),
Rgba32.FromHex("#281f3f"), Rgba32.ParseHex("#281f3f"),
Rgba32.FromHex("#1c1949"), Rgba32.ParseHex("#1c1949"),
Rgba32.FromHex("#4f638d"), Rgba32.ParseHex("#4f638d"),
Rgba32.FromHex("#383867"), Rgba32.ParseHex("#383867"),
Rgba32.FromHex("#5c6b8f"), Rgba32.ParseHex("#5c6b8f"),
Rgba32.FromHex("#657abb"), Rgba32.ParseHex("#657abb"),
Rgba32.FromHex("#6f88af"), Rgba32.ParseHex("#6f88af"),
Rgba32.FromHex("#7994b5"), Rgba32.ParseHex("#7994b5"),
Rgba32.FromHex("#6fb5a8"), Rgba32.ParseHex("#6fb5a8"),
Rgba32.FromHex("#719ba2"), Rgba32.ParseHex("#719ba2"),
Rgba32.FromHex("#8aa1a6"), Rgba32.ParseHex("#8aa1a6"),
Rgba32.FromHex("#d0d5d3"), Rgba32.ParseHex("#d0d5d3"),
Rgba32.FromHex("#8590ae"), Rgba32.ParseHex("#8590ae"),
Rgba32.FromHex("#3a2f52"), Rgba32.ParseHex("#3a2f52"),
Rgba32.FromHex("#39334a"), Rgba32.ParseHex("#39334a"),
Rgba32.FromHex("#6c6d94"), Rgba32.ParseHex("#6c6d94"),
Rgba32.FromHex("#584c77"), Rgba32.ParseHex("#584c77"),
Rgba32.FromHex("#533552"), Rgba32.ParseHex("#533552"),
Rgba32.FromHex("#463759"), Rgba32.ParseHex("#463759"),
Rgba32.FromHex("#bfbac0"), Rgba32.ParseHex("#bfbac0"),
Rgba32.FromHex("#77747f"), Rgba32.ParseHex("#77747f"),
Rgba32.FromHex("#4a475c"), Rgba32.ParseHex("#4a475c"),
Rgba32.FromHex("#b8bfaf"), Rgba32.ParseHex("#b8bfaf"),
Rgba32.FromHex("#b2b599"), Rgba32.ParseHex("#b2b599"),
Rgba32.FromHex("#979c84"), Rgba32.ParseHex("#979c84"),
Rgba32.FromHex("#5d6161"), Rgba32.ParseHex("#5d6161"),
Rgba32.FromHex("#61ac86"), Rgba32.ParseHex("#61ac86"),
Rgba32.FromHex("#a4b6a7"), Rgba32.ParseHex("#a4b6a7"),
Rgba32.FromHex("#adba98"), Rgba32.ParseHex("#adba98"),
Rgba32.FromHex("#93b778"), Rgba32.ParseHex("#93b778"),
Rgba32.FromHex("#7d8c55"), Rgba32.ParseHex("#7d8c55"),
Rgba32.FromHex("#33431e"), Rgba32.ParseHex("#33431e"),
Rgba32.FromHex("#7c8635"), Rgba32.ParseHex("#7c8635"),
Rgba32.FromHex("#8e9849"), Rgba32.ParseHex("#8e9849"),
Rgba32.FromHex("#c2c190"), Rgba32.ParseHex("#c2c190"),
Rgba32.FromHex("#67765b"), Rgba32.ParseHex("#67765b"),
Rgba32.FromHex("#ab924b"), Rgba32.ParseHex("#ab924b"),
Rgba32.FromHex("#c8c76f"), Rgba32.ParseHex("#c8c76f"),
Rgba32.FromHex("#ccc050"), Rgba32.ParseHex("#ccc050"),
Rgba32.FromHex("#ebdd99"), Rgba32.ParseHex("#ebdd99"),
Rgba32.FromHex("#ab9649"), Rgba32.ParseHex("#ab9649"),
Rgba32.FromHex("#dbc364"), Rgba32.ParseHex("#dbc364"),
Rgba32.FromHex("#e6d058"), Rgba32.ParseHex("#e6d058"),
Rgba32.FromHex("#ead665"), Rgba32.ParseHex("#ead665"),
Rgba32.FromHex("#d09b2c"), Rgba32.ParseHex("#d09b2c"),
Rgba32.FromHex("#a36629"), Rgba32.ParseHex("#a36629"),
Rgba32.FromHex("#a77d35"), Rgba32.ParseHex("#a77d35"),
Rgba32.FromHex("#f0d696"), Rgba32.ParseHex("#f0d696"),
Rgba32.FromHex("#d7c485"), Rgba32.ParseHex("#d7c485"),
Rgba32.FromHex("#f1d28c"), Rgba32.ParseHex("#f1d28c"),
Rgba32.FromHex("#efcc83"), Rgba32.ParseHex("#efcc83"),
Rgba32.FromHex("#f3daa7"), Rgba32.ParseHex("#f3daa7"),
Rgba32.FromHex("#dfa837"), Rgba32.ParseHex("#dfa837"),
Rgba32.FromHex("#ebbc71"), Rgba32.ParseHex("#ebbc71"),
Rgba32.FromHex("#d17c3f"), Rgba32.ParseHex("#d17c3f"),
Rgba32.FromHex("#92462f"), Rgba32.ParseHex("#92462f"),
Rgba32.FromHex("#be7249"), Rgba32.ParseHex("#be7249"),
Rgba32.FromHex("#bb603c"), Rgba32.ParseHex("#bb603c"),
Rgba32.FromHex("#c76b4a"), Rgba32.ParseHex("#c76b4a"),
Rgba32.FromHex("#a75536"), Rgba32.ParseHex("#a75536"),
Rgba32.FromHex("#b63e36"), Rgba32.ParseHex("#b63e36"),
Rgba32.FromHex("#b5493a"), Rgba32.ParseHex("#b5493a"),
Rgba32.FromHex("#cd6d57"), Rgba32.ParseHex("#cd6d57"),
Rgba32.FromHex("#711518"), Rgba32.ParseHex("#711518"),
Rgba32.FromHex("#e9c49d"), Rgba32.ParseHex("#e9c49d"),
Rgba32.FromHex("#eedac3"), Rgba32.ParseHex("#eedac3"),
Rgba32.FromHex("#eecfbf"), Rgba32.ParseHex("#eecfbf"),
Rgba32.FromHex("#ce536b"), Rgba32.ParseHex("#ce536b"),
Rgba32.FromHex("#b74a70"), Rgba32.ParseHex("#b74a70"),
Rgba32.FromHex("#b7757c"), Rgba32.ParseHex("#b7757c"),
Rgba32.FromHex("#612741"), Rgba32.ParseHex("#612741"),
Rgba32.FromHex("#7a4848"), Rgba32.ParseHex("#7a4848"),
Rgba32.FromHex("#3f3033"), Rgba32.ParseHex("#3f3033"),
Rgba32.FromHex("#8d746f"), Rgba32.ParseHex("#8d746f"),
Rgba32.FromHex("#4d3635"), Rgba32.ParseHex("#4d3635"),
Rgba32.FromHex("#6e3b31"), Rgba32.ParseHex("#6e3b31"),
Rgba32.FromHex("#864735"), Rgba32.ParseHex("#864735"),
Rgba32.FromHex("#553d3a"), Rgba32.ParseHex("#553d3a"),
Rgba32.FromHex("#613936"), Rgba32.ParseHex("#613936"),
Rgba32.FromHex("#7a4b3a"), Rgba32.ParseHex("#7a4b3a"),
Rgba32.FromHex("#946943"), Rgba32.ParseHex("#946943"),
Rgba32.FromHex("#c39e6d"), Rgba32.ParseHex("#c39e6d"),
Rgba32.FromHex("#513e32"), Rgba32.ParseHex("#513e32"),
Rgba32.FromHex("#8b7859"), Rgba32.ParseHex("#8b7859"),
Rgba32.FromHex("#9b856b"), Rgba32.ParseHex("#9b856b"),
Rgba32.FromHex("#766051"), Rgba32.ParseHex("#766051"),
Rgba32.FromHex("#453b32") Rgba32.ParseHex("#453b32")
}; };
} }
} }

39
src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.Definitions.cs

@ -1,4 +1,4 @@
// Copyright (c) Six Labors and contributors. // Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
namespace SixLabors.ImageSharp.PixelFormats namespace SixLabors.ImageSharp.PixelFormats
@ -138,6 +138,11 @@ namespace SixLabors.ImageSharp.PixelFormats
/// </summary> /// </summary>
public static readonly Rgba32 DarkGreen = Color.DarkGreen; public static readonly Rgba32 DarkGreen = Color.DarkGreen;
/// <summary>
/// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #A9A9A9.
/// </summary>
public static readonly Rgba32 DarkGrey = Color.DarkGrey;
/// <summary> /// <summary>
/// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #BDB76B. /// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #BDB76B.
/// </summary> /// </summary>
@ -188,6 +193,11 @@ namespace SixLabors.ImageSharp.PixelFormats
/// </summary> /// </summary>
public static readonly Rgba32 DarkSlateGray = Color.DarkSlateGray; public static readonly Rgba32 DarkSlateGray = Color.DarkSlateGray;
/// <summary>
/// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #2F4F4F.
/// </summary>
public static readonly Rgba32 DarkSlateGrey = Color.DarkSlateGrey;
/// <summary> /// <summary>
/// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #00CED1. /// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #00CED1.
/// </summary> /// </summary>
@ -213,6 +223,11 @@ namespace SixLabors.ImageSharp.PixelFormats
/// </summary> /// </summary>
public static readonly Rgba32 DimGray = Color.DimGray; public static readonly Rgba32 DimGray = Color.DimGray;
/// <summary>
/// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #696969.
/// </summary>
public static readonly Rgba32 DimGrey = Color.DimGrey;
/// <summary> /// <summary>
/// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #1E90FF. /// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #1E90FF.
/// </summary> /// </summary>
@ -273,6 +288,11 @@ namespace SixLabors.ImageSharp.PixelFormats
/// </summary> /// </summary>
public static readonly Rgba32 GreenYellow = Color.GreenYellow; public static readonly Rgba32 GreenYellow = Color.GreenYellow;
/// <summary>
/// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #808080.
/// </summary>
public static readonly Rgba32 Grey = Color.Grey;
/// <summary> /// <summary>
/// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #F0FFF0. /// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #F0FFF0.
/// </summary> /// </summary>
@ -353,6 +373,11 @@ namespace SixLabors.ImageSharp.PixelFormats
/// </summary> /// </summary>
public static readonly Rgba32 LightGreen = Color.LightGreen; public static readonly Rgba32 LightGreen = Color.LightGreen;
/// <summary>
/// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #D3D3D3.
/// </summary>
public static readonly Rgba32 LightGrey = Color.LightGrey;
/// <summary> /// <summary>
/// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #FFB6C1. /// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #FFB6C1.
/// </summary> /// </summary>
@ -378,6 +403,11 @@ namespace SixLabors.ImageSharp.PixelFormats
/// </summary> /// </summary>
public static readonly Rgba32 LightSlateGray = Color.LightSlateGray; public static readonly Rgba32 LightSlateGray = Color.LightSlateGray;
/// <summary>
/// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #778899.
/// </summary>
public static readonly Rgba32 LightSlateGrey = Color.LightSlateGrey;
/// <summary> /// <summary>
/// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #B0C4DE. /// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #B0C4DE.
/// </summary> /// </summary>
@ -643,6 +673,11 @@ namespace SixLabors.ImageSharp.PixelFormats
/// </summary> /// </summary>
public static readonly Rgba32 SlateGray = Color.SlateGray; public static readonly Rgba32 SlateGray = Color.SlateGray;
/// <summary>
/// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #708090.
/// </summary>
public static readonly Rgba32 SlateGrey = Color.SlateGrey;
/// <summary> /// <summary>
/// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #FFFAFA. /// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #FFFAFA.
/// </summary> /// </summary>
@ -718,4 +753,4 @@ namespace SixLabors.ImageSharp.PixelFormats
/// </summary> /// </summary>
public static readonly Rgba32 YellowGreen = Color.YellowGreen; public static readonly Rgba32 YellowGreen = Color.YellowGreen;
} }
} }

35
src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.cs

@ -230,7 +230,8 @@ namespace SixLabors.ImageSharp.PixelFormats
public static bool operator !=(Rgba32 left, Rgba32 right) => !left.Equals(right); public static bool operator !=(Rgba32 left, Rgba32 right) => !left.Equals(right);
/// <summary> /// <summary>
/// Creates a new instance of the <see cref="Rgba32"/> struct. /// Creates a new instance of the <see cref="Rgba32"/> struct
/// from the given hexadecimal string.
/// </summary> /// </summary>
/// <param name="hex"> /// <param name="hex">
/// The hexadecimal representation of the combined color components arranged /// The hexadecimal representation of the combined color components arranged
@ -239,19 +240,45 @@ namespace SixLabors.ImageSharp.PixelFormats
/// <returns> /// <returns>
/// The <see cref="Rgba32"/>. /// The <see cref="Rgba32"/>.
/// </returns> /// </returns>
public static Rgba32 FromHex(string hex) [MethodImpl(InliningOptions.ShortMethod)]
public static Rgba32 ParseHex(string hex)
{ {
if (!TryParseHex(hex, out Rgba32 rgba))
{
throw new ArgumentException("Hexadecimal string is not in the correct format.", nameof(hex));
}
return rgba;
}
/// <summary>
/// Attempts to creates a new instance of the <see cref="Rgba32"/> struct
/// from the given hexadecimal string.
/// </summary>
/// <param name="hex">
/// The hexadecimal representation of the combined color components arranged
/// in rgb, rgba, rrggbb, or rrggbbaa format to match web syntax.
/// </param>
/// <param name="result">When this method returns, contains the <see cref="Rgba32"/> equivalent of the hexadecimal input.</param>
/// <returns>
/// The <see cref="bool"/>.
/// </returns>
[MethodImpl(InliningOptions.ShortMethod)]
public static bool TryParseHex(string hex, out Rgba32 result)
{
result = default;
Guard.NotNullOrWhiteSpace(hex, nameof(hex)); Guard.NotNullOrWhiteSpace(hex, nameof(hex));
hex = ToRgbaHex(hex); hex = ToRgbaHex(hex);
if (hex is null || !uint.TryParse(hex, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out uint packedValue)) if (hex is null || !uint.TryParse(hex, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out uint packedValue))
{ {
throw new ArgumentException("Hexadecimal string is not in the correct format.", nameof(hex)); return false;
} }
packedValue = BinaryPrimitives.ReverseEndianness(packedValue); packedValue = BinaryPrimitives.ReverseEndianness(packedValue);
return Unsafe.As<uint, Rgba32>(ref packedValue); result = Unsafe.As<uint, Rgba32>(ref packedValue);
return true;
} }
/// <inheritdoc /> /// <inheritdoc />

2
src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.cs

@ -94,7 +94,7 @@ namespace SixLabors.ImageSharp.PixelFormats
/// <returns> /// <returns>
/// The <see cref="RgbaVector"/>. /// The <see cref="RgbaVector"/>.
/// </returns> /// </returns>
public static RgbaVector FromHex(string hex) => Color.FromHex(hex).ToPixel<RgbaVector>(); public static RgbaVector FromHex(string hex) => Color.ParseHex(hex).ToPixel<RgbaVector>();
/// <inheritdoc /> /// <inheritdoc />
public PixelOperations<RgbaVector> CreatePixelOperations() => new PixelOperations(); public PixelOperations<RgbaVector> CreatePixelOperations() => new PixelOperations();

78
tests/ImageSharp.Tests/Color/ColorTests.cs

@ -3,9 +3,7 @@
using System; using System;
using System.Linq; using System.Linq;
using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.PixelFormats;
using Xunit; using Xunit;
namespace SixLabors.ImageSharp.Tests namespace SixLabors.ImageSharp.Tests
@ -15,7 +13,7 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public void WithAlpha() public void WithAlpha()
{ {
Color c1 = Color.FromRgba(111, 222, 55, 255); var c1 = Color.FromRgba(111, 222, 55, 255);
Color c2 = c1.WithAlpha(0.5f); Color c2 = c1.WithAlpha(0.5f);
var expected = new Rgba32(111, 222, 55, 128); var expected = new Rgba32(111, 222, 55, 128);
@ -56,7 +54,7 @@ namespace SixLabors.ImageSharp.Tests
public void ToHex() public void ToHex()
{ {
string expected = "ABCD1234"; string expected = "ABCD1234";
Color color = Color.FromHex(expected); var color = Color.ParseHex(expected);
string actual = color.ToHex(); string actual = color.ToHex();
Assert.Equal(expected, actual); Assert.Equal(expected, actual);
@ -66,14 +64,22 @@ namespace SixLabors.ImageSharp.Tests
public void WebSafePalette_IsCorrect() public void WebSafePalette_IsCorrect()
{ {
Rgba32[] actualPalette = Color.WebSafePalette.ToArray().Select(c => (Rgba32)c).ToArray(); Rgba32[] actualPalette = Color.WebSafePalette.ToArray().Select(c => (Rgba32)c).ToArray();
Assert.Equal(ReferencePalette.WebSafeColors, actualPalette);
for (int i = 0; i < ReferencePalette.WebSafeColors.Length; i++)
{
Assert.Equal(ReferencePalette.WebSafeColors[i], actualPalette[i]);
}
} }
[Fact] [Fact]
public void WernerPalette_IsCorrect() public void WernerPalette_IsCorrect()
{ {
Rgba32[] actualPalette = Color.WernerPalette.ToArray().Select(c => (Rgba32)c).ToArray(); Rgba32[] actualPalette = Color.WernerPalette.ToArray().Select(c => (Rgba32)c).ToArray();
Assert.Equal(ReferencePalette.WernerColors, actualPalette);
for (int i = 0; i < ReferencePalette.WernerColors.Length; i++)
{
Assert.Equal(ReferencePalette.WernerColors[i], actualPalette[i]);
}
} }
public class FromHex public class FromHex
@ -81,28 +87,74 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public void ShortHex() public void ShortHex()
{ {
Assert.Equal(new Rgb24(255, 255, 255), (Rgb24)Color.FromHex("#fff")); Assert.Equal(new Rgb24(255, 255, 255), (Rgb24)Color.ParseHex("#fff"));
Assert.Equal(new Rgb24(255, 255, 255), (Rgb24)Color.FromHex("fff")); Assert.Equal(new Rgb24(255, 255, 255), (Rgb24)Color.ParseHex("fff"));
Assert.Equal(new Rgba32(0, 0, 0, 255), (Rgba32)Color.FromHex("000f")); Assert.Equal(new Rgba32(0, 0, 0, 255), (Rgba32)Color.ParseHex("000f"));
}
[Fact]
public void TryShortHex()
{
Assert.True(Color.TryParseHex("#fff", out Color actual));
Assert.Equal(new Rgb24(255, 255, 255), (Rgb24)actual);
Assert.True(Color.TryParseHex("fff", out actual));
Assert.Equal(new Rgb24(255, 255, 255), (Rgb24)actual);
Assert.True(Color.TryParseHex("000f", out actual));
Assert.Equal(new Rgba32(0, 0, 0, 255), (Rgba32)actual);
} }
[Fact] [Fact]
public void LeadingPoundIsOptional() public void LeadingPoundIsOptional()
{ {
Assert.Equal(new Rgb24(0, 128, 128), (Rgb24)Color.FromHex("#008080")); Assert.Equal(new Rgb24(0, 128, 128), (Rgb24)Color.ParseHex("#008080"));
Assert.Equal(new Rgb24(0, 128, 128), (Rgb24)Color.FromHex("008080")); Assert.Equal(new Rgb24(0, 128, 128), (Rgb24)Color.ParseHex("008080"));
} }
[Fact] [Fact]
public void ThrowsOnEmpty() public void ThrowsOnEmpty()
{ {
Assert.Throws<ArgumentException>(() => Color.FromHex(string.Empty)); Assert.Throws<ArgumentException>(() => Color.ParseHex(string.Empty));
} }
[Fact] [Fact]
public void ThrowsOnNull() public void ThrowsOnNull()
{ {
Assert.Throws<ArgumentNullException>(() => Color.FromHex(null)); Assert.Throws<ArgumentNullException>(() => Color.ParseHex(null));
}
}
public class FromString
{
[Fact]
public void ColorNames()
{
foreach (string name in ReferencePalette.ColorNames.Keys)
{
Rgba32 expected = ReferencePalette.ColorNames[name];
Assert.Equal(expected, (Rgba32)Color.Parse(name));
Assert.Equal(expected, (Rgba32)Color.Parse(name.ToLowerInvariant()));
Assert.Equal(expected, (Rgba32)Color.Parse(expected.ToHex()));
}
}
[Fact]
public void TryColorNames()
{
foreach (string name in ReferencePalette.ColorNames.Keys)
{
Rgba32 expected = ReferencePalette.ColorNames[name];
Assert.True(Color.TryParse(name, out Color actual));
Assert.Equal(expected, (Rgba32)actual);
Assert.True(Color.TryParse(name.ToLowerInvariant(), out actual));
Assert.Equal(expected, (Rgba32)actual);
Assert.True(Color.TryParse(expected.ToHex(), out actual));
Assert.Equal(expected, (Rgba32)actual);
}
} }
} }
} }

376
tests/ImageSharp.Tests/Color/ReferencePalette.cs

@ -1,6 +1,8 @@
// Copyright (c) Six Labors and contributors. // Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System;
using System.Collections.Generic;
using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.PixelFormats;
namespace SixLabors.ImageSharp.Tests namespace SixLabors.ImageSharp.Tests
@ -162,116 +164,270 @@ namespace SixLabors.ImageSharp.Tests
/// </summary> /// </summary>
public static readonly Rgba32[] WernerColors = public static readonly Rgba32[] WernerColors =
{ {
Rgba32.FromHex("#f1e9cd"), Rgba32.ParseHex("#f1e9cd"),
Rgba32.FromHex("#f2e7cf"), Rgba32.ParseHex("#f2e7cf"),
Rgba32.FromHex("#ece6d0"), Rgba32.ParseHex("#ece6d0"),
Rgba32.FromHex("#f2eacc"), Rgba32.ParseHex("#f2eacc"),
Rgba32.FromHex("#f3e9ca"), Rgba32.ParseHex("#f3e9ca"),
Rgba32.FromHex("#f2ebcd"), Rgba32.ParseHex("#f2ebcd"),
Rgba32.FromHex("#e6e1c9"), Rgba32.ParseHex("#e6e1c9"),
Rgba32.FromHex("#e2ddc6"), Rgba32.ParseHex("#e2ddc6"),
Rgba32.FromHex("#cbc8b7"), Rgba32.ParseHex("#cbc8b7"),
Rgba32.FromHex("#bfbbb0"), Rgba32.ParseHex("#bfbbb0"),
Rgba32.FromHex("#bebeb3"), Rgba32.ParseHex("#bebeb3"),
Rgba32.FromHex("#b7b5ac"), Rgba32.ParseHex("#b7b5ac"),
Rgba32.FromHex("#bab191"), Rgba32.ParseHex("#bab191"),
Rgba32.FromHex("#9c9d9a"), Rgba32.ParseHex("#9c9d9a"),
Rgba32.FromHex("#8a8d84"), Rgba32.ParseHex("#8a8d84"),
Rgba32.FromHex("#5b5c61"), Rgba32.ParseHex("#5b5c61"),
Rgba32.FromHex("#555152"), Rgba32.ParseHex("#555152"),
Rgba32.FromHex("#413f44"), Rgba32.ParseHex("#413f44"),
Rgba32.FromHex("#454445"), Rgba32.ParseHex("#454445"),
Rgba32.FromHex("#423937"), Rgba32.ParseHex("#423937"),
Rgba32.FromHex("#433635"), Rgba32.ParseHex("#433635"),
Rgba32.FromHex("#252024"), Rgba32.ParseHex("#252024"),
Rgba32.FromHex("#241f20"), Rgba32.ParseHex("#241f20"),
Rgba32.FromHex("#281f3f"), Rgba32.ParseHex("#281f3f"),
Rgba32.FromHex("#1c1949"), Rgba32.ParseHex("#1c1949"),
Rgba32.FromHex("#4f638d"), Rgba32.ParseHex("#4f638d"),
Rgba32.FromHex("#383867"), Rgba32.ParseHex("#383867"),
Rgba32.FromHex("#5c6b8f"), Rgba32.ParseHex("#5c6b8f"),
Rgba32.FromHex("#657abb"), Rgba32.ParseHex("#657abb"),
Rgba32.FromHex("#6f88af"), Rgba32.ParseHex("#6f88af"),
Rgba32.FromHex("#7994b5"), Rgba32.ParseHex("#7994b5"),
Rgba32.FromHex("#6fb5a8"), Rgba32.ParseHex("#6fb5a8"),
Rgba32.FromHex("#719ba2"), Rgba32.ParseHex("#719ba2"),
Rgba32.FromHex("#8aa1a6"), Rgba32.ParseHex("#8aa1a6"),
Rgba32.FromHex("#d0d5d3"), Rgba32.ParseHex("#d0d5d3"),
Rgba32.FromHex("#8590ae"), Rgba32.ParseHex("#8590ae"),
Rgba32.FromHex("#3a2f52"), Rgba32.ParseHex("#3a2f52"),
Rgba32.FromHex("#39334a"), Rgba32.ParseHex("#39334a"),
Rgba32.FromHex("#6c6d94"), Rgba32.ParseHex("#6c6d94"),
Rgba32.FromHex("#584c77"), Rgba32.ParseHex("#584c77"),
Rgba32.FromHex("#533552"), Rgba32.ParseHex("#533552"),
Rgba32.FromHex("#463759"), Rgba32.ParseHex("#463759"),
Rgba32.FromHex("#bfbac0"), Rgba32.ParseHex("#bfbac0"),
Rgba32.FromHex("#77747f"), Rgba32.ParseHex("#77747f"),
Rgba32.FromHex("#4a475c"), Rgba32.ParseHex("#4a475c"),
Rgba32.FromHex("#b8bfaf"), Rgba32.ParseHex("#b8bfaf"),
Rgba32.FromHex("#b2b599"), Rgba32.ParseHex("#b2b599"),
Rgba32.FromHex("#979c84"), Rgba32.ParseHex("#979c84"),
Rgba32.FromHex("#5d6161"), Rgba32.ParseHex("#5d6161"),
Rgba32.FromHex("#61ac86"), Rgba32.ParseHex("#61ac86"),
Rgba32.FromHex("#a4b6a7"), Rgba32.ParseHex("#a4b6a7"),
Rgba32.FromHex("#adba98"), Rgba32.ParseHex("#adba98"),
Rgba32.FromHex("#93b778"), Rgba32.ParseHex("#93b778"),
Rgba32.FromHex("#7d8c55"), Rgba32.ParseHex("#7d8c55"),
Rgba32.FromHex("#33431e"), Rgba32.ParseHex("#33431e"),
Rgba32.FromHex("#7c8635"), Rgba32.ParseHex("#7c8635"),
Rgba32.FromHex("#8e9849"), Rgba32.ParseHex("#8e9849"),
Rgba32.FromHex("#c2c190"), Rgba32.ParseHex("#c2c190"),
Rgba32.FromHex("#67765b"), Rgba32.ParseHex("#67765b"),
Rgba32.FromHex("#ab924b"), Rgba32.ParseHex("#ab924b"),
Rgba32.FromHex("#c8c76f"), Rgba32.ParseHex("#c8c76f"),
Rgba32.FromHex("#ccc050"), Rgba32.ParseHex("#ccc050"),
Rgba32.FromHex("#ebdd99"), Rgba32.ParseHex("#ebdd99"),
Rgba32.FromHex("#ab9649"), Rgba32.ParseHex("#ab9649"),
Rgba32.FromHex("#dbc364"), Rgba32.ParseHex("#dbc364"),
Rgba32.FromHex("#e6d058"), Rgba32.ParseHex("#e6d058"),
Rgba32.FromHex("#ead665"), Rgba32.ParseHex("#ead665"),
Rgba32.FromHex("#d09b2c"), Rgba32.ParseHex("#d09b2c"),
Rgba32.FromHex("#a36629"), Rgba32.ParseHex("#a36629"),
Rgba32.FromHex("#a77d35"), Rgba32.ParseHex("#a77d35"),
Rgba32.FromHex("#f0d696"), Rgba32.ParseHex("#f0d696"),
Rgba32.FromHex("#d7c485"), Rgba32.ParseHex("#d7c485"),
Rgba32.FromHex("#f1d28c"), Rgba32.ParseHex("#f1d28c"),
Rgba32.FromHex("#efcc83"), Rgba32.ParseHex("#efcc83"),
Rgba32.FromHex("#f3daa7"), Rgba32.ParseHex("#f3daa7"),
Rgba32.FromHex("#dfa837"), Rgba32.ParseHex("#dfa837"),
Rgba32.FromHex("#ebbc71"), Rgba32.ParseHex("#ebbc71"),
Rgba32.FromHex("#d17c3f"), Rgba32.ParseHex("#d17c3f"),
Rgba32.FromHex("#92462f"), Rgba32.ParseHex("#92462f"),
Rgba32.FromHex("#be7249"), Rgba32.ParseHex("#be7249"),
Rgba32.FromHex("#bb603c"), Rgba32.ParseHex("#bb603c"),
Rgba32.FromHex("#c76b4a"), Rgba32.ParseHex("#c76b4a"),
Rgba32.FromHex("#a75536"), Rgba32.ParseHex("#a75536"),
Rgba32.FromHex("#b63e36"), Rgba32.ParseHex("#b63e36"),
Rgba32.FromHex("#b5493a"), Rgba32.ParseHex("#b5493a"),
Rgba32.FromHex("#cd6d57"), Rgba32.ParseHex("#cd6d57"),
Rgba32.FromHex("#711518"), Rgba32.ParseHex("#711518"),
Rgba32.FromHex("#e9c49d"), Rgba32.ParseHex("#e9c49d"),
Rgba32.FromHex("#eedac3"), Rgba32.ParseHex("#eedac3"),
Rgba32.FromHex("#eecfbf"), Rgba32.ParseHex("#eecfbf"),
Rgba32.FromHex("#ce536b"), Rgba32.ParseHex("#ce536b"),
Rgba32.FromHex("#b74a70"), Rgba32.ParseHex("#b74a70"),
Rgba32.FromHex("#b7757c"), Rgba32.ParseHex("#b7757c"),
Rgba32.FromHex("#612741"), Rgba32.ParseHex("#612741"),
Rgba32.FromHex("#7a4848"), Rgba32.ParseHex("#7a4848"),
Rgba32.FromHex("#3f3033"), Rgba32.ParseHex("#3f3033"),
Rgba32.FromHex("#8d746f"), Rgba32.ParseHex("#8d746f"),
Rgba32.FromHex("#4d3635"), Rgba32.ParseHex("#4d3635"),
Rgba32.FromHex("#6e3b31"), Rgba32.ParseHex("#6e3b31"),
Rgba32.FromHex("#864735"), Rgba32.ParseHex("#864735"),
Rgba32.FromHex("#553d3a"), Rgba32.ParseHex("#553d3a"),
Rgba32.FromHex("#613936"), Rgba32.ParseHex("#613936"),
Rgba32.FromHex("#7a4b3a"), Rgba32.ParseHex("#7a4b3a"),
Rgba32.FromHex("#946943"), Rgba32.ParseHex("#946943"),
Rgba32.FromHex("#c39e6d"), Rgba32.ParseHex("#c39e6d"),
Rgba32.FromHex("#513e32"), Rgba32.ParseHex("#513e32"),
Rgba32.FromHex("#8b7859"), Rgba32.ParseHex("#8b7859"),
Rgba32.FromHex("#9b856b"), Rgba32.ParseHex("#9b856b"),
Rgba32.FromHex("#766051"), Rgba32.ParseHex("#766051"),
Rgba32.FromHex("#453b32") Rgba32.ParseHex("#453b32")
}; };
public static readonly Dictionary<string, Rgba32> ColorNames =
new Dictionary<string, Rgba32>(StringComparer.OrdinalIgnoreCase)
{
{ nameof(Rgba32.AliceBlue), Rgba32.AliceBlue },
{ nameof(Rgba32.AntiqueWhite), Rgba32.AntiqueWhite },
{ nameof(Rgba32.Aqua), Rgba32.Aqua },
{ nameof(Rgba32.Aquamarine), Rgba32.Aquamarine },
{ nameof(Rgba32.Azure), Rgba32.Azure },
{ nameof(Rgba32.Beige), Rgba32.Beige },
{ nameof(Rgba32.Bisque), Rgba32.Bisque },
{ nameof(Rgba32.Black), Rgba32.Black },
{ nameof(Rgba32.BlanchedAlmond), Rgba32.BlanchedAlmond },
{ nameof(Rgba32.Blue), Rgba32.Blue },
{ nameof(Rgba32.BlueViolet), Rgba32.BlueViolet },
{ nameof(Rgba32.Brown), Rgba32.Brown },
{ nameof(Rgba32.BurlyWood), Rgba32.BurlyWood },
{ nameof(Rgba32.CadetBlue), Rgba32.CadetBlue },
{ nameof(Rgba32.Chartreuse), Rgba32.Chartreuse },
{ nameof(Rgba32.Chocolate), Rgba32.Chocolate },
{ nameof(Rgba32.Coral), Rgba32.Coral },
{ nameof(Rgba32.CornflowerBlue), Rgba32.CornflowerBlue },
{ nameof(Rgba32.Cornsilk), Rgba32.Cornsilk },
{ nameof(Rgba32.Crimson), Rgba32.Crimson },
{ nameof(Rgba32.Cyan), Rgba32.Cyan },
{ nameof(Rgba32.DarkBlue), Rgba32.DarkBlue },
{ nameof(Rgba32.DarkCyan), Rgba32.DarkCyan },
{ nameof(Rgba32.DarkGoldenrod), Rgba32.DarkGoldenrod },
{ nameof(Rgba32.DarkGray), Rgba32.DarkGray },
{ nameof(Rgba32.DarkGreen), Rgba32.DarkGreen },
{ nameof(Rgba32.DarkGrey), Rgba32.DarkGrey },
{ nameof(Rgba32.DarkKhaki), Rgba32.DarkKhaki },
{ nameof(Rgba32.DarkMagenta), Rgba32.DarkMagenta },
{ nameof(Rgba32.DarkOliveGreen), Rgba32.DarkOliveGreen },
{ nameof(Rgba32.DarkOrange), Rgba32.DarkOrange },
{ nameof(Rgba32.DarkOrchid), Rgba32.DarkOrchid },
{ nameof(Rgba32.DarkRed), Rgba32.DarkRed },
{ nameof(Rgba32.DarkSalmon), Rgba32.DarkSalmon },
{ nameof(Rgba32.DarkSeaGreen), Rgba32.DarkSeaGreen },
{ nameof(Rgba32.DarkSlateBlue), Rgba32.DarkSlateBlue },
{ nameof(Rgba32.DarkSlateGray), Rgba32.DarkSlateGray },
{ nameof(Rgba32.DarkSlateGrey), Rgba32.DarkSlateGrey },
{ nameof(Rgba32.DarkTurquoise), Rgba32.DarkTurquoise },
{ nameof(Rgba32.DarkViolet), Rgba32.DarkViolet },
{ nameof(Rgba32.DeepPink), Rgba32.DeepPink },
{ nameof(Rgba32.DeepSkyBlue), Rgba32.DeepSkyBlue },
{ nameof(Rgba32.DimGray), Rgba32.DimGray },
{ nameof(Rgba32.DimGrey), Rgba32.DimGrey },
{ nameof(Rgba32.DodgerBlue), Rgba32.DodgerBlue },
{ nameof(Rgba32.Firebrick), Rgba32.Firebrick },
{ nameof(Rgba32.FloralWhite), Rgba32.FloralWhite },
{ nameof(Rgba32.ForestGreen), Rgba32.ForestGreen },
{ nameof(Rgba32.Fuchsia), Rgba32.Fuchsia },
{ nameof(Rgba32.Gainsboro), Rgba32.Gainsboro },
{ nameof(Rgba32.GhostWhite), Rgba32.GhostWhite },
{ nameof(Rgba32.Gold), Rgba32.Gold },
{ nameof(Rgba32.Goldenrod), Rgba32.Goldenrod },
{ nameof(Rgba32.Gray), Rgba32.Gray },
{ nameof(Rgba32.Green), Rgba32.Green },
{ nameof(Rgba32.GreenYellow), Rgba32.GreenYellow },
{ nameof(Rgba32.Grey), Rgba32.Grey },
{ nameof(Rgba32.Honeydew), Rgba32.Honeydew },
{ nameof(Rgba32.HotPink), Rgba32.HotPink },
{ nameof(Rgba32.IndianRed), Rgba32.IndianRed },
{ nameof(Rgba32.Indigo), Rgba32.Indigo },
{ nameof(Rgba32.Ivory), Rgba32.Ivory },
{ nameof(Rgba32.Khaki), Rgba32.Khaki },
{ nameof(Rgba32.Lavender), Rgba32.Lavender },
{ nameof(Rgba32.LavenderBlush), Rgba32.LavenderBlush },
{ nameof(Rgba32.LawnGreen), Rgba32.LawnGreen },
{ nameof(Rgba32.LemonChiffon), Rgba32.LemonChiffon },
{ nameof(Rgba32.LightBlue), Rgba32.LightBlue },
{ nameof(Rgba32.LightCoral), Rgba32.LightCoral },
{ nameof(Rgba32.LightCyan), Rgba32.LightCyan },
{ nameof(Rgba32.LightGoldenrodYellow), Rgba32.LightGoldenrodYellow },
{ nameof(Rgba32.LightGray), Rgba32.LightGray },
{ nameof(Rgba32.LightGreen), Rgba32.LightGreen },
{ nameof(Rgba32.LightGrey), Rgba32.LightGrey },
{ nameof(Rgba32.LightPink), Rgba32.LightPink },
{ nameof(Rgba32.LightSalmon), Rgba32.LightSalmon },
{ nameof(Rgba32.LightSeaGreen), Rgba32.LightSeaGreen },
{ nameof(Rgba32.LightSkyBlue), Rgba32.LightSkyBlue },
{ nameof(Rgba32.LightSlateGray), Rgba32.LightSlateGray },
{ nameof(Rgba32.LightSlateGrey), Rgba32.LightSlateGrey },
{ nameof(Rgba32.LightSteelBlue), Rgba32.LightSteelBlue },
{ nameof(Rgba32.LightYellow), Rgba32.LightYellow },
{ nameof(Rgba32.Lime), Rgba32.Lime },
{ nameof(Rgba32.LimeGreen), Rgba32.LimeGreen },
{ nameof(Rgba32.Linen), Rgba32.Linen },
{ nameof(Rgba32.Magenta), Rgba32.Magenta },
{ nameof(Rgba32.Maroon), Rgba32.Maroon },
{ nameof(Rgba32.MediumAquamarine), Rgba32.MediumAquamarine },
{ nameof(Rgba32.MediumBlue), Rgba32.MediumBlue },
{ nameof(Rgba32.MediumOrchid), Rgba32.MediumOrchid },
{ nameof(Rgba32.MediumPurple), Rgba32.MediumPurple },
{ nameof(Rgba32.MediumSeaGreen), Rgba32.MediumSeaGreen },
{ nameof(Rgba32.MediumSlateBlue), Rgba32.MediumSlateBlue },
{ nameof(Rgba32.MediumSpringGreen), Rgba32.MediumSpringGreen },
{ nameof(Rgba32.MediumTurquoise), Rgba32.MediumTurquoise },
{ nameof(Rgba32.MediumVioletRed), Rgba32.MediumVioletRed },
{ nameof(Rgba32.MidnightBlue), Rgba32.MidnightBlue },
{ nameof(Rgba32.MintCream), Rgba32.MintCream },
{ nameof(Rgba32.MistyRose), Rgba32.MistyRose },
{ nameof(Rgba32.Moccasin), Rgba32.Moccasin },
{ nameof(Rgba32.NavajoWhite), Rgba32.NavajoWhite },
{ nameof(Rgba32.Navy), Rgba32.Navy },
{ nameof(Rgba32.OldLace), Rgba32.OldLace },
{ nameof(Rgba32.Olive), Rgba32.Olive },
{ nameof(Rgba32.OliveDrab), Rgba32.OliveDrab },
{ nameof(Rgba32.Orange), Rgba32.Orange },
{ nameof(Rgba32.OrangeRed), Rgba32.OrangeRed },
{ nameof(Rgba32.Orchid), Rgba32.Orchid },
{ nameof(Rgba32.PaleGoldenrod), Rgba32.PaleGoldenrod },
{ nameof(Rgba32.PaleGreen), Rgba32.PaleGreen },
{ nameof(Rgba32.PaleTurquoise), Rgba32.PaleTurquoise },
{ nameof(Rgba32.PaleVioletRed), Rgba32.PaleVioletRed },
{ nameof(Rgba32.PapayaWhip), Rgba32.PapayaWhip },
{ nameof(Rgba32.PeachPuff), Rgba32.PeachPuff },
{ nameof(Rgba32.Peru), Rgba32.Peru },
{ nameof(Rgba32.Pink), Rgba32.Pink },
{ nameof(Rgba32.Plum), Rgba32.Plum },
{ nameof(Rgba32.PowderBlue), Rgba32.PowderBlue },
{ nameof(Rgba32.Purple), Rgba32.Purple },
{ nameof(Rgba32.RebeccaPurple), Rgba32.RebeccaPurple },
{ nameof(Rgba32.Red), Rgba32.Red },
{ nameof(Rgba32.RosyBrown), Rgba32.RosyBrown },
{ nameof(Rgba32.RoyalBlue), Rgba32.RoyalBlue },
{ nameof(Rgba32.SaddleBrown), Rgba32.SaddleBrown },
{ nameof(Rgba32.Salmon), Rgba32.Salmon },
{ nameof(Rgba32.SandyBrown), Rgba32.SandyBrown },
{ nameof(Rgba32.SeaGreen), Rgba32.SeaGreen },
{ nameof(Rgba32.SeaShell), Rgba32.SeaShell },
{ nameof(Rgba32.Sienna), Rgba32.Sienna },
{ nameof(Rgba32.Silver), Rgba32.Silver },
{ nameof(Rgba32.SkyBlue), Rgba32.SkyBlue },
{ nameof(Rgba32.SlateBlue), Rgba32.SlateBlue },
{ nameof(Rgba32.SlateGray), Rgba32.SlateGray },
{ nameof(Rgba32.SlateGrey), Rgba32.SlateGrey },
{ nameof(Rgba32.Snow), Rgba32.Snow },
{ nameof(Rgba32.SpringGreen), Rgba32.SpringGreen },
{ nameof(Rgba32.SteelBlue), Rgba32.SteelBlue },
{ nameof(Rgba32.Tan), Rgba32.Tan },
{ nameof(Rgba32.Teal), Rgba32.Teal },
{ nameof(Rgba32.Thistle), Rgba32.Thistle },
{ nameof(Rgba32.Tomato), Rgba32.Tomato },
{ nameof(Rgba32.Transparent), Rgba32.Transparent },
{ nameof(Rgba32.Turquoise), Rgba32.Turquoise },
{ nameof(Rgba32.Violet), Rgba32.Violet },
{ nameof(Rgba32.Wheat), Rgba32.Wheat },
{ nameof(Rgba32.White), Rgba32.White },
{ nameof(Rgba32.WhiteSmoke), Rgba32.WhiteSmoke },
{ nameof(Rgba32.Yellow), Rgba32.Yellow },
{ nameof(Rgba32.YellowGreen), Rgba32.YellowGreen }
};
} }
} }

16
tests/ImageSharp.Tests/PixelFormats/Rgba32Tests.cs

@ -21,10 +21,10 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats
{ {
var color1 = new Rgba32(0, 0, 0); var color1 = new Rgba32(0, 0, 0);
var color2 = new Rgba32(0, 0, 0, 1F); var color2 = new Rgba32(0, 0, 0, 1F);
var color3 = Rgba32.FromHex("#000"); var color3 = Rgba32.ParseHex("#000");
var color4 = Rgba32.FromHex("#000F"); var color4 = Rgba32.ParseHex("#000F");
var color5 = Rgba32.FromHex("#000000"); var color5 = Rgba32.ParseHex("#000000");
var color6 = Rgba32.FromHex("#000000FF"); var color6 = Rgba32.ParseHex("#000000FF");
Assert.Equal(color1, color2); Assert.Equal(color1, color2);
Assert.Equal(color1, color3); Assert.Equal(color1, color3);
@ -41,9 +41,9 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats
{ {
var color1 = new Rgba32(255, 0, 0, 255); var color1 = new Rgba32(255, 0, 0, 255);
var color2 = new Rgba32(0, 0, 0, 255); var color2 = new Rgba32(0, 0, 0, 255);
var color3 = Rgba32.FromHex("#000"); var color3 = Rgba32.ParseHex("#000");
var color4 = Rgba32.FromHex("#000000"); var color4 = Rgba32.ParseHex("#000000");
var color5 = Rgba32.FromHex("#FF000000"); var color5 = Rgba32.ParseHex("#FF000000");
Assert.NotEqual(color1, color2); Assert.NotEqual(color1, color2);
Assert.NotEqual(color1, color3); Assert.NotEqual(color1, color3);
@ -89,7 +89,7 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats
public void FromAndToHex() public void FromAndToHex()
{ {
// 8 digit hex matches css4 spec. RRGGBBAA // 8 digit hex matches css4 spec. RRGGBBAA
var color = Rgba32.FromHex("#AABBCCDD"); // 170, 187, 204, 221 var color = Rgba32.ParseHex("#AABBCCDD"); // 170, 187, 204, 221
Assert.Equal(170, color.R); Assert.Equal(170, color.R);
Assert.Equal(187, color.G); Assert.Equal(187, color.G);
Assert.Equal(204, color.B); Assert.Equal(204, color.B);

2
tests/ImageSharp.Tests/PixelFormats/UnPackedPixelTests.cs

@ -60,7 +60,7 @@ namespace SixLabors.ImageSharp.Tests.Colors
[Fact] [Fact]
public void Color_Types_From_Hex_Produce_Equal_Scaled_Component_OutPut() public void Color_Types_From_Hex_Produce_Equal_Scaled_Component_OutPut()
{ {
var color = Rgba32.FromHex("183060C0"); var color = Rgba32.ParseHex("183060C0");
var colorVector = RgbaVector.FromHex("183060C0"); var colorVector = RgbaVector.FromHex("183060C0");
Assert.Equal(color.R, (byte)(colorVector.R * 255)); Assert.Equal(color.R, (byte)(colorVector.R * 255));

Loading…
Cancel
Save