Browse Source

Add new parsing methods. Fix #1103

pull/1104/head
James Jackson-South 6 years ago
parent
commit
1e9b1ef7dc
  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.
// Licensed under the Apache License, Version 2.0.
using System;
using System.Collections.Generic;
namespace SixLabors.ImageSharp
{
/// <content>
@ -8,6 +11,8 @@ namespace SixLabors.ImageSharp
/// </content>
public readonly partial struct Color
{
private static readonly Lazy<Dictionary<string, Color>> NamedColorsLookupLazy = new Lazy<Dictionary<string, Color>>(CreateNamedColorsLookup, true);
/// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #F0F8FF.
/// </summary>
@ -111,7 +116,7 @@ namespace SixLabors.ImageSharp
/// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #00FFFF.
/// </summary>
public static readonly Color Cyan = FromRgba(0, 255, 255, 255);
public static readonly Color Cyan = Aqua;
/// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #00008B.
@ -138,6 +143,11 @@ namespace SixLabors.ImageSharp
/// </summary>
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>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #BDB76B.
/// </summary>
@ -188,6 +198,11 @@ namespace SixLabors.ImageSharp
/// </summary>
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>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #00CED1.
/// </summary>
@ -213,6 +228,11 @@ namespace SixLabors.ImageSharp
/// </summary>
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>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #1E90FF.
/// </summary>
@ -273,6 +293,11 @@ namespace SixLabors.ImageSharp
/// </summary>
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>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #F0FFF0.
/// </summary>
@ -353,6 +378,11 @@ namespace SixLabors.ImageSharp
/// </summary>
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>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #FFB6C1.
/// </summary>
@ -378,6 +408,11 @@ namespace SixLabors.ImageSharp
/// </summary>
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>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #B0C4DE.
/// </summary>
@ -406,7 +441,7 @@ namespace SixLabors.ImageSharp
/// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #FF00FF.
/// </summary>
public static readonly Color Magenta = FromRgba(255, 0, 255, 255);
public static readonly Color Magenta = Fuchsia;
/// <summary>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #800000.
@ -643,6 +678,11 @@ namespace SixLabors.ImageSharp
/// </summary>
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>
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #FFFAFA.
/// </summary>
@ -717,5 +757,161 @@ namespace SixLabors.ImageSharp
/// Represents a <see paramref="Color"/> matching the W3C definition that has an hex value of #9ACD32.
/// </summary>
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[]
{
FromHex("#f1e9cd"),
FromHex("#f2e7cf"),
FromHex("#ece6d0"),
FromHex("#f2eacc"),
FromHex("#f3e9ca"),
FromHex("#f2ebcd"),
FromHex("#e6e1c9"),
FromHex("#e2ddc6"),
FromHex("#cbc8b7"),
FromHex("#bfbbb0"),
FromHex("#bebeb3"),
FromHex("#b7b5ac"),
FromHex("#bab191"),
FromHex("#9c9d9a"),
FromHex("#8a8d84"),
FromHex("#5b5c61"),
FromHex("#555152"),
FromHex("#413f44"),
FromHex("#454445"),
FromHex("#423937"),
FromHex("#433635"),
FromHex("#252024"),
FromHex("#241f20"),
FromHex("#281f3f"),
FromHex("#1c1949"),
FromHex("#4f638d"),
FromHex("#383867"),
FromHex("#5c6b8f"),
FromHex("#657abb"),
FromHex("#6f88af"),
FromHex("#7994b5"),
FromHex("#6fb5a8"),
FromHex("#719ba2"),
FromHex("#8aa1a6"),
FromHex("#d0d5d3"),
FromHex("#8590ae"),
FromHex("#3a2f52"),
FromHex("#39334a"),
FromHex("#6c6d94"),
FromHex("#584c77"),
FromHex("#533552"),
FromHex("#463759"),
FromHex("#bfbac0"),
FromHex("#77747f"),
FromHex("#4a475c"),
FromHex("#b8bfaf"),
FromHex("#b2b599"),
FromHex("#979c84"),
FromHex("#5d6161"),
FromHex("#61ac86"),
FromHex("#a4b6a7"),
FromHex("#adba98"),
FromHex("#93b778"),
FromHex("#7d8c55"),
FromHex("#33431e"),
FromHex("#7c8635"),
FromHex("#8e9849"),
FromHex("#c2c190"),
FromHex("#67765b"),
FromHex("#ab924b"),
FromHex("#c8c76f"),
FromHex("#ccc050"),
FromHex("#ebdd99"),
FromHex("#ab9649"),
FromHex("#dbc364"),
FromHex("#e6d058"),
FromHex("#ead665"),
FromHex("#d09b2c"),
FromHex("#a36629"),
FromHex("#a77d35"),
FromHex("#f0d696"),
FromHex("#d7c485"),
FromHex("#f1d28c"),
FromHex("#efcc83"),
FromHex("#f3daa7"),
FromHex("#dfa837"),
FromHex("#ebbc71"),
FromHex("#d17c3f"),
FromHex("#92462f"),
FromHex("#be7249"),
FromHex("#bb603c"),
FromHex("#c76b4a"),
FromHex("#a75536"),
FromHex("#b63e36"),
FromHex("#b5493a"),
FromHex("#cd6d57"),
FromHex("#711518"),
FromHex("#e9c49d"),
FromHex("#eedac3"),
FromHex("#eecfbf"),
FromHex("#ce536b"),
FromHex("#b74a70"),
FromHex("#b7757c"),
FromHex("#612741"),
FromHex("#7a4848"),
FromHex("#3f3033"),
FromHex("#8d746f"),
FromHex("#4d3635"),
FromHex("#6e3b31"),
FromHex("#864735"),
FromHex("#553d3a"),
FromHex("#613936"),
FromHex("#7a4b3a"),
FromHex("#946943"),
FromHex("#c39e6d"),
FromHex("#513e32"),
FromHex("#8b7859"),
FromHex("#9b856b"),
FromHex("#766051"),
FromHex("#453b32")
ParseHex("#f1e9cd"),
ParseHex("#f2e7cf"),
ParseHex("#ece6d0"),
ParseHex("#f2eacc"),
ParseHex("#f3e9ca"),
ParseHex("#f2ebcd"),
ParseHex("#e6e1c9"),
ParseHex("#e2ddc6"),
ParseHex("#cbc8b7"),
ParseHex("#bfbbb0"),
ParseHex("#bebeb3"),
ParseHex("#b7b5ac"),
ParseHex("#bab191"),
ParseHex("#9c9d9a"),
ParseHex("#8a8d84"),
ParseHex("#5b5c61"),
ParseHex("#555152"),
ParseHex("#413f44"),
ParseHex("#454445"),
ParseHex("#423937"),
ParseHex("#433635"),
ParseHex("#252024"),
ParseHex("#241f20"),
ParseHex("#281f3f"),
ParseHex("#1c1949"),
ParseHex("#4f638d"),
ParseHex("#383867"),
ParseHex("#5c6b8f"),
ParseHex("#657abb"),
ParseHex("#6f88af"),
ParseHex("#7994b5"),
ParseHex("#6fb5a8"),
ParseHex("#719ba2"),
ParseHex("#8aa1a6"),
ParseHex("#d0d5d3"),
ParseHex("#8590ae"),
ParseHex("#3a2f52"),
ParseHex("#39334a"),
ParseHex("#6c6d94"),
ParseHex("#584c77"),
ParseHex("#533552"),
ParseHex("#463759"),
ParseHex("#bfbac0"),
ParseHex("#77747f"),
ParseHex("#4a475c"),
ParseHex("#b8bfaf"),
ParseHex("#b2b599"),
ParseHex("#979c84"),
ParseHex("#5d6161"),
ParseHex("#61ac86"),
ParseHex("#a4b6a7"),
ParseHex("#adba98"),
ParseHex("#93b778"),
ParseHex("#7d8c55"),
ParseHex("#33431e"),
ParseHex("#7c8635"),
ParseHex("#8e9849"),
ParseHex("#c2c190"),
ParseHex("#67765b"),
ParseHex("#ab924b"),
ParseHex("#c8c76f"),
ParseHex("#ccc050"),
ParseHex("#ebdd99"),
ParseHex("#ab9649"),
ParseHex("#dbc364"),
ParseHex("#e6d058"),
ParseHex("#ead665"),
ParseHex("#d09b2c"),
ParseHex("#a36629"),
ParseHex("#a77d35"),
ParseHex("#f0d696"),
ParseHex("#d7c485"),
ParseHex("#f1d28c"),
ParseHex("#efcc83"),
ParseHex("#f3daa7"),
ParseHex("#dfa837"),
ParseHex("#ebbc71"),
ParseHex("#d17c3f"),
ParseHex("#92462f"),
ParseHex("#be7249"),
ParseHex("#bb603c"),
ParseHex("#c76b4a"),
ParseHex("#a75536"),
ParseHex("#b63e36"),
ParseHex("#b5493a"),
ParseHex("#cd6d57"),
ParseHex("#711518"),
ParseHex("#e9c49d"),
ParseHex("#eedac3"),
ParseHex("#eecfbf"),
ParseHex("#ce536b"),
ParseHex("#b74a70"),
ParseHex("#b7757c"),
ParseHex("#612741"),
ParseHex("#7a4848"),
ParseHex("#3f3033"),
ParseHex("#8d746f"),
ParseHex("#4d3635"),
ParseHex("#6e3b31"),
ParseHex("#864735"),
ParseHex("#553d3a"),
ParseHex("#613936"),
ParseHex("#7a4b3a"),
ParseHex("#946943"),
ParseHex("#c39e6d"),
ParseHex("#513e32"),
ParseHex("#8b7859"),
ParseHex("#9b856b"),
ParseHex("#766051"),
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);
/// <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>
/// <param name="hex">
/// The hexadecimal representation of the combined color components arranged
/// in rgb, rgba, rrggbb, or rrggbbaa format to match web syntax.
/// </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)]
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);
}
/// <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>
/// Alters the alpha channel of the color, returning a new instance.
/// </summary>
@ -117,7 +189,7 @@ namespace SixLabors.ImageSharp
/// <returns>The color having it's alpha channel altered.</returns>
public Color WithAlpha(float alpha)
{
Vector4 v = (Vector4)this;
var v = (Vector4)this;
v.W = alpha;
return new Color(v);
}

220
src/ImageSharp/PixelFormats/ColorConstants.cs

@ -163,116 +163,116 @@ namespace SixLabors.ImageSharp.PixelFormats
/// </summary>
public static readonly Rgba32[] WernerColors =
{
Rgba32.FromHex("#f1e9cd"),
Rgba32.FromHex("#f2e7cf"),
Rgba32.FromHex("#ece6d0"),
Rgba32.FromHex("#f2eacc"),
Rgba32.FromHex("#f3e9ca"),
Rgba32.FromHex("#f2ebcd"),
Rgba32.FromHex("#e6e1c9"),
Rgba32.FromHex("#e2ddc6"),
Rgba32.FromHex("#cbc8b7"),
Rgba32.FromHex("#bfbbb0"),
Rgba32.FromHex("#bebeb3"),
Rgba32.FromHex("#b7b5ac"),
Rgba32.FromHex("#bab191"),
Rgba32.FromHex("#9c9d9a"),
Rgba32.FromHex("#8a8d84"),
Rgba32.FromHex("#5b5c61"),
Rgba32.FromHex("#555152"),
Rgba32.FromHex("#413f44"),
Rgba32.FromHex("#454445"),
Rgba32.FromHex("#423937"),
Rgba32.FromHex("#433635"),
Rgba32.FromHex("#252024"),
Rgba32.FromHex("#241f20"),
Rgba32.FromHex("#281f3f"),
Rgba32.FromHex("#1c1949"),
Rgba32.FromHex("#4f638d"),
Rgba32.FromHex("#383867"),
Rgba32.FromHex("#5c6b8f"),
Rgba32.FromHex("#657abb"),
Rgba32.FromHex("#6f88af"),
Rgba32.FromHex("#7994b5"),
Rgba32.FromHex("#6fb5a8"),
Rgba32.FromHex("#719ba2"),
Rgba32.FromHex("#8aa1a6"),
Rgba32.FromHex("#d0d5d3"),
Rgba32.FromHex("#8590ae"),
Rgba32.FromHex("#3a2f52"),
Rgba32.FromHex("#39334a"),
Rgba32.FromHex("#6c6d94"),
Rgba32.FromHex("#584c77"),
Rgba32.FromHex("#533552"),
Rgba32.FromHex("#463759"),
Rgba32.FromHex("#bfbac0"),
Rgba32.FromHex("#77747f"),
Rgba32.FromHex("#4a475c"),
Rgba32.FromHex("#b8bfaf"),
Rgba32.FromHex("#b2b599"),
Rgba32.FromHex("#979c84"),
Rgba32.FromHex("#5d6161"),
Rgba32.FromHex("#61ac86"),
Rgba32.FromHex("#a4b6a7"),
Rgba32.FromHex("#adba98"),
Rgba32.FromHex("#93b778"),
Rgba32.FromHex("#7d8c55"),
Rgba32.FromHex("#33431e"),
Rgba32.FromHex("#7c8635"),
Rgba32.FromHex("#8e9849"),
Rgba32.FromHex("#c2c190"),
Rgba32.FromHex("#67765b"),
Rgba32.FromHex("#ab924b"),
Rgba32.FromHex("#c8c76f"),
Rgba32.FromHex("#ccc050"),
Rgba32.FromHex("#ebdd99"),
Rgba32.FromHex("#ab9649"),
Rgba32.FromHex("#dbc364"),
Rgba32.FromHex("#e6d058"),
Rgba32.FromHex("#ead665"),
Rgba32.FromHex("#d09b2c"),
Rgba32.FromHex("#a36629"),
Rgba32.FromHex("#a77d35"),
Rgba32.FromHex("#f0d696"),
Rgba32.FromHex("#d7c485"),
Rgba32.FromHex("#f1d28c"),
Rgba32.FromHex("#efcc83"),
Rgba32.FromHex("#f3daa7"),
Rgba32.FromHex("#dfa837"),
Rgba32.FromHex("#ebbc71"),
Rgba32.FromHex("#d17c3f"),
Rgba32.FromHex("#92462f"),
Rgba32.FromHex("#be7249"),
Rgba32.FromHex("#bb603c"),
Rgba32.FromHex("#c76b4a"),
Rgba32.FromHex("#a75536"),
Rgba32.FromHex("#b63e36"),
Rgba32.FromHex("#b5493a"),
Rgba32.FromHex("#cd6d57"),
Rgba32.FromHex("#711518"),
Rgba32.FromHex("#e9c49d"),
Rgba32.FromHex("#eedac3"),
Rgba32.FromHex("#eecfbf"),
Rgba32.FromHex("#ce536b"),
Rgba32.FromHex("#b74a70"),
Rgba32.FromHex("#b7757c"),
Rgba32.FromHex("#612741"),
Rgba32.FromHex("#7a4848"),
Rgba32.FromHex("#3f3033"),
Rgba32.FromHex("#8d746f"),
Rgba32.FromHex("#4d3635"),
Rgba32.FromHex("#6e3b31"),
Rgba32.FromHex("#864735"),
Rgba32.FromHex("#553d3a"),
Rgba32.FromHex("#613936"),
Rgba32.FromHex("#7a4b3a"),
Rgba32.FromHex("#946943"),
Rgba32.FromHex("#c39e6d"),
Rgba32.FromHex("#513e32"),
Rgba32.FromHex("#8b7859"),
Rgba32.FromHex("#9b856b"),
Rgba32.FromHex("#766051"),
Rgba32.FromHex("#453b32")
Rgba32.ParseHex("#f1e9cd"),
Rgba32.ParseHex("#f2e7cf"),
Rgba32.ParseHex("#ece6d0"),
Rgba32.ParseHex("#f2eacc"),
Rgba32.ParseHex("#f3e9ca"),
Rgba32.ParseHex("#f2ebcd"),
Rgba32.ParseHex("#e6e1c9"),
Rgba32.ParseHex("#e2ddc6"),
Rgba32.ParseHex("#cbc8b7"),
Rgba32.ParseHex("#bfbbb0"),
Rgba32.ParseHex("#bebeb3"),
Rgba32.ParseHex("#b7b5ac"),
Rgba32.ParseHex("#bab191"),
Rgba32.ParseHex("#9c9d9a"),
Rgba32.ParseHex("#8a8d84"),
Rgba32.ParseHex("#5b5c61"),
Rgba32.ParseHex("#555152"),
Rgba32.ParseHex("#413f44"),
Rgba32.ParseHex("#454445"),
Rgba32.ParseHex("#423937"),
Rgba32.ParseHex("#433635"),
Rgba32.ParseHex("#252024"),
Rgba32.ParseHex("#241f20"),
Rgba32.ParseHex("#281f3f"),
Rgba32.ParseHex("#1c1949"),
Rgba32.ParseHex("#4f638d"),
Rgba32.ParseHex("#383867"),
Rgba32.ParseHex("#5c6b8f"),
Rgba32.ParseHex("#657abb"),
Rgba32.ParseHex("#6f88af"),
Rgba32.ParseHex("#7994b5"),
Rgba32.ParseHex("#6fb5a8"),
Rgba32.ParseHex("#719ba2"),
Rgba32.ParseHex("#8aa1a6"),
Rgba32.ParseHex("#d0d5d3"),
Rgba32.ParseHex("#8590ae"),
Rgba32.ParseHex("#3a2f52"),
Rgba32.ParseHex("#39334a"),
Rgba32.ParseHex("#6c6d94"),
Rgba32.ParseHex("#584c77"),
Rgba32.ParseHex("#533552"),
Rgba32.ParseHex("#463759"),
Rgba32.ParseHex("#bfbac0"),
Rgba32.ParseHex("#77747f"),
Rgba32.ParseHex("#4a475c"),
Rgba32.ParseHex("#b8bfaf"),
Rgba32.ParseHex("#b2b599"),
Rgba32.ParseHex("#979c84"),
Rgba32.ParseHex("#5d6161"),
Rgba32.ParseHex("#61ac86"),
Rgba32.ParseHex("#a4b6a7"),
Rgba32.ParseHex("#adba98"),
Rgba32.ParseHex("#93b778"),
Rgba32.ParseHex("#7d8c55"),
Rgba32.ParseHex("#33431e"),
Rgba32.ParseHex("#7c8635"),
Rgba32.ParseHex("#8e9849"),
Rgba32.ParseHex("#c2c190"),
Rgba32.ParseHex("#67765b"),
Rgba32.ParseHex("#ab924b"),
Rgba32.ParseHex("#c8c76f"),
Rgba32.ParseHex("#ccc050"),
Rgba32.ParseHex("#ebdd99"),
Rgba32.ParseHex("#ab9649"),
Rgba32.ParseHex("#dbc364"),
Rgba32.ParseHex("#e6d058"),
Rgba32.ParseHex("#ead665"),
Rgba32.ParseHex("#d09b2c"),
Rgba32.ParseHex("#a36629"),
Rgba32.ParseHex("#a77d35"),
Rgba32.ParseHex("#f0d696"),
Rgba32.ParseHex("#d7c485"),
Rgba32.ParseHex("#f1d28c"),
Rgba32.ParseHex("#efcc83"),
Rgba32.ParseHex("#f3daa7"),
Rgba32.ParseHex("#dfa837"),
Rgba32.ParseHex("#ebbc71"),
Rgba32.ParseHex("#d17c3f"),
Rgba32.ParseHex("#92462f"),
Rgba32.ParseHex("#be7249"),
Rgba32.ParseHex("#bb603c"),
Rgba32.ParseHex("#c76b4a"),
Rgba32.ParseHex("#a75536"),
Rgba32.ParseHex("#b63e36"),
Rgba32.ParseHex("#b5493a"),
Rgba32.ParseHex("#cd6d57"),
Rgba32.ParseHex("#711518"),
Rgba32.ParseHex("#e9c49d"),
Rgba32.ParseHex("#eedac3"),
Rgba32.ParseHex("#eecfbf"),
Rgba32.ParseHex("#ce536b"),
Rgba32.ParseHex("#b74a70"),
Rgba32.ParseHex("#b7757c"),
Rgba32.ParseHex("#612741"),
Rgba32.ParseHex("#7a4848"),
Rgba32.ParseHex("#3f3033"),
Rgba32.ParseHex("#8d746f"),
Rgba32.ParseHex("#4d3635"),
Rgba32.ParseHex("#6e3b31"),
Rgba32.ParseHex("#864735"),
Rgba32.ParseHex("#553d3a"),
Rgba32.ParseHex("#613936"),
Rgba32.ParseHex("#7a4b3a"),
Rgba32.ParseHex("#946943"),
Rgba32.ParseHex("#c39e6d"),
Rgba32.ParseHex("#513e32"),
Rgba32.ParseHex("#8b7859"),
Rgba32.ParseHex("#9b856b"),
Rgba32.ParseHex("#766051"),
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.
namespace SixLabors.ImageSharp.PixelFormats
@ -138,6 +138,11 @@ namespace SixLabors.ImageSharp.PixelFormats
/// </summary>
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>
/// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #BDB76B.
/// </summary>
@ -188,6 +193,11 @@ namespace SixLabors.ImageSharp.PixelFormats
/// </summary>
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>
/// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #00CED1.
/// </summary>
@ -213,6 +223,11 @@ namespace SixLabors.ImageSharp.PixelFormats
/// </summary>
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>
/// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #1E90FF.
/// </summary>
@ -273,6 +288,11 @@ namespace SixLabors.ImageSharp.PixelFormats
/// </summary>
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>
/// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #F0FFF0.
/// </summary>
@ -353,6 +373,11 @@ namespace SixLabors.ImageSharp.PixelFormats
/// </summary>
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>
/// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #FFB6C1.
/// </summary>
@ -378,6 +403,11 @@ namespace SixLabors.ImageSharp.PixelFormats
/// </summary>
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>
/// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #B0C4DE.
/// </summary>
@ -643,6 +673,11 @@ namespace SixLabors.ImageSharp.PixelFormats
/// </summary>
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>
/// Represents a <see cref="Rgba32"/> matching the W3C definition that has an hex value of #FFFAFA.
/// </summary>
@ -718,4 +753,4 @@ namespace SixLabors.ImageSharp.PixelFormats
/// </summary>
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);
/// <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>
/// <param name="hex">
/// The hexadecimal representation of the combined color components arranged
@ -239,19 +240,45 @@ namespace SixLabors.ImageSharp.PixelFormats
/// <returns>
/// The <see cref="Rgba32"/>.
/// </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));
hex = ToRgbaHex(hex);
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);
return Unsafe.As<uint, Rgba32>(ref packedValue);
result = Unsafe.As<uint, Rgba32>(ref packedValue);
return true;
}
/// <inheritdoc />

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

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

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

@ -3,9 +3,7 @@
using System;
using System.Linq;
using SixLabors.ImageSharp.PixelFormats;
using Xunit;
namespace SixLabors.ImageSharp.Tests
@ -15,7 +13,7 @@ namespace SixLabors.ImageSharp.Tests
[Fact]
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);
var expected = new Rgba32(111, 222, 55, 128);
@ -56,7 +54,7 @@ namespace SixLabors.ImageSharp.Tests
public void ToHex()
{
string expected = "ABCD1234";
Color color = Color.FromHex(expected);
var color = Color.ParseHex(expected);
string actual = color.ToHex();
Assert.Equal(expected, actual);
@ -66,14 +64,22 @@ namespace SixLabors.ImageSharp.Tests
public void WebSafePalette_IsCorrect()
{
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]
public void WernerPalette_IsCorrect()
{
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
@ -81,28 +87,74 @@ namespace SixLabors.ImageSharp.Tests
[Fact]
public void ShortHex()
{
Assert.Equal(new Rgb24(255, 255, 255), (Rgb24)Color.FromHex("#fff"));
Assert.Equal(new Rgb24(255, 255, 255), (Rgb24)Color.FromHex("fff"));
Assert.Equal(new Rgba32(0, 0, 0, 255), (Rgba32)Color.FromHex("000f"));
Assert.Equal(new Rgb24(255, 255, 255), (Rgb24)Color.ParseHex("#fff"));
Assert.Equal(new Rgb24(255, 255, 255), (Rgb24)Color.ParseHex("fff"));
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]
public void LeadingPoundIsOptional()
{
Assert.Equal(new Rgb24(0, 128, 128), (Rgb24)Color.FromHex("#008080"));
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.ParseHex("008080"));
}
[Fact]
public void ThrowsOnEmpty()
{
Assert.Throws<ArgumentException>(() => Color.FromHex(string.Empty));
Assert.Throws<ArgumentException>(() => Color.ParseHex(string.Empty));
}
[Fact]
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.
// Licensed under the Apache License, Version 2.0.
using System;
using System.Collections.Generic;
using SixLabors.ImageSharp.PixelFormats;
namespace SixLabors.ImageSharp.Tests
@ -162,116 +164,270 @@ namespace SixLabors.ImageSharp.Tests
/// </summary>
public static readonly Rgba32[] WernerColors =
{
Rgba32.FromHex("#f1e9cd"),
Rgba32.FromHex("#f2e7cf"),
Rgba32.FromHex("#ece6d0"),
Rgba32.FromHex("#f2eacc"),
Rgba32.FromHex("#f3e9ca"),
Rgba32.FromHex("#f2ebcd"),
Rgba32.FromHex("#e6e1c9"),
Rgba32.FromHex("#e2ddc6"),
Rgba32.FromHex("#cbc8b7"),
Rgba32.FromHex("#bfbbb0"),
Rgba32.FromHex("#bebeb3"),
Rgba32.FromHex("#b7b5ac"),
Rgba32.FromHex("#bab191"),
Rgba32.FromHex("#9c9d9a"),
Rgba32.FromHex("#8a8d84"),
Rgba32.FromHex("#5b5c61"),
Rgba32.FromHex("#555152"),
Rgba32.FromHex("#413f44"),
Rgba32.FromHex("#454445"),
Rgba32.FromHex("#423937"),
Rgba32.FromHex("#433635"),
Rgba32.FromHex("#252024"),
Rgba32.FromHex("#241f20"),
Rgba32.FromHex("#281f3f"),
Rgba32.FromHex("#1c1949"),
Rgba32.FromHex("#4f638d"),
Rgba32.FromHex("#383867"),
Rgba32.FromHex("#5c6b8f"),
Rgba32.FromHex("#657abb"),
Rgba32.FromHex("#6f88af"),
Rgba32.FromHex("#7994b5"),
Rgba32.FromHex("#6fb5a8"),
Rgba32.FromHex("#719ba2"),
Rgba32.FromHex("#8aa1a6"),
Rgba32.FromHex("#d0d5d3"),
Rgba32.FromHex("#8590ae"),
Rgba32.FromHex("#3a2f52"),
Rgba32.FromHex("#39334a"),
Rgba32.FromHex("#6c6d94"),
Rgba32.FromHex("#584c77"),
Rgba32.FromHex("#533552"),
Rgba32.FromHex("#463759"),
Rgba32.FromHex("#bfbac0"),
Rgba32.FromHex("#77747f"),
Rgba32.FromHex("#4a475c"),
Rgba32.FromHex("#b8bfaf"),
Rgba32.FromHex("#b2b599"),
Rgba32.FromHex("#979c84"),
Rgba32.FromHex("#5d6161"),
Rgba32.FromHex("#61ac86"),
Rgba32.FromHex("#a4b6a7"),
Rgba32.FromHex("#adba98"),
Rgba32.FromHex("#93b778"),
Rgba32.FromHex("#7d8c55"),
Rgba32.FromHex("#33431e"),
Rgba32.FromHex("#7c8635"),
Rgba32.FromHex("#8e9849"),
Rgba32.FromHex("#c2c190"),
Rgba32.FromHex("#67765b"),
Rgba32.FromHex("#ab924b"),
Rgba32.FromHex("#c8c76f"),
Rgba32.FromHex("#ccc050"),
Rgba32.FromHex("#ebdd99"),
Rgba32.FromHex("#ab9649"),
Rgba32.FromHex("#dbc364"),
Rgba32.FromHex("#e6d058"),
Rgba32.FromHex("#ead665"),
Rgba32.FromHex("#d09b2c"),
Rgba32.FromHex("#a36629"),
Rgba32.FromHex("#a77d35"),
Rgba32.FromHex("#f0d696"),
Rgba32.FromHex("#d7c485"),
Rgba32.FromHex("#f1d28c"),
Rgba32.FromHex("#efcc83"),
Rgba32.FromHex("#f3daa7"),
Rgba32.FromHex("#dfa837"),
Rgba32.FromHex("#ebbc71"),
Rgba32.FromHex("#d17c3f"),
Rgba32.FromHex("#92462f"),
Rgba32.FromHex("#be7249"),
Rgba32.FromHex("#bb603c"),
Rgba32.FromHex("#c76b4a"),
Rgba32.FromHex("#a75536"),
Rgba32.FromHex("#b63e36"),
Rgba32.FromHex("#b5493a"),
Rgba32.FromHex("#cd6d57"),
Rgba32.FromHex("#711518"),
Rgba32.FromHex("#e9c49d"),
Rgba32.FromHex("#eedac3"),
Rgba32.FromHex("#eecfbf"),
Rgba32.FromHex("#ce536b"),
Rgba32.FromHex("#b74a70"),
Rgba32.FromHex("#b7757c"),
Rgba32.FromHex("#612741"),
Rgba32.FromHex("#7a4848"),
Rgba32.FromHex("#3f3033"),
Rgba32.FromHex("#8d746f"),
Rgba32.FromHex("#4d3635"),
Rgba32.FromHex("#6e3b31"),
Rgba32.FromHex("#864735"),
Rgba32.FromHex("#553d3a"),
Rgba32.FromHex("#613936"),
Rgba32.FromHex("#7a4b3a"),
Rgba32.FromHex("#946943"),
Rgba32.FromHex("#c39e6d"),
Rgba32.FromHex("#513e32"),
Rgba32.FromHex("#8b7859"),
Rgba32.FromHex("#9b856b"),
Rgba32.FromHex("#766051"),
Rgba32.FromHex("#453b32")
Rgba32.ParseHex("#f1e9cd"),
Rgba32.ParseHex("#f2e7cf"),
Rgba32.ParseHex("#ece6d0"),
Rgba32.ParseHex("#f2eacc"),
Rgba32.ParseHex("#f3e9ca"),
Rgba32.ParseHex("#f2ebcd"),
Rgba32.ParseHex("#e6e1c9"),
Rgba32.ParseHex("#e2ddc6"),
Rgba32.ParseHex("#cbc8b7"),
Rgba32.ParseHex("#bfbbb0"),
Rgba32.ParseHex("#bebeb3"),
Rgba32.ParseHex("#b7b5ac"),
Rgba32.ParseHex("#bab191"),
Rgba32.ParseHex("#9c9d9a"),
Rgba32.ParseHex("#8a8d84"),
Rgba32.ParseHex("#5b5c61"),
Rgba32.ParseHex("#555152"),
Rgba32.ParseHex("#413f44"),
Rgba32.ParseHex("#454445"),
Rgba32.ParseHex("#423937"),
Rgba32.ParseHex("#433635"),
Rgba32.ParseHex("#252024"),
Rgba32.ParseHex("#241f20"),
Rgba32.ParseHex("#281f3f"),
Rgba32.ParseHex("#1c1949"),
Rgba32.ParseHex("#4f638d"),
Rgba32.ParseHex("#383867"),
Rgba32.ParseHex("#5c6b8f"),
Rgba32.ParseHex("#657abb"),
Rgba32.ParseHex("#6f88af"),
Rgba32.ParseHex("#7994b5"),
Rgba32.ParseHex("#6fb5a8"),
Rgba32.ParseHex("#719ba2"),
Rgba32.ParseHex("#8aa1a6"),
Rgba32.ParseHex("#d0d5d3"),
Rgba32.ParseHex("#8590ae"),
Rgba32.ParseHex("#3a2f52"),
Rgba32.ParseHex("#39334a"),
Rgba32.ParseHex("#6c6d94"),
Rgba32.ParseHex("#584c77"),
Rgba32.ParseHex("#533552"),
Rgba32.ParseHex("#463759"),
Rgba32.ParseHex("#bfbac0"),
Rgba32.ParseHex("#77747f"),
Rgba32.ParseHex("#4a475c"),
Rgba32.ParseHex("#b8bfaf"),
Rgba32.ParseHex("#b2b599"),
Rgba32.ParseHex("#979c84"),
Rgba32.ParseHex("#5d6161"),
Rgba32.ParseHex("#61ac86"),
Rgba32.ParseHex("#a4b6a7"),
Rgba32.ParseHex("#adba98"),
Rgba32.ParseHex("#93b778"),
Rgba32.ParseHex("#7d8c55"),
Rgba32.ParseHex("#33431e"),
Rgba32.ParseHex("#7c8635"),
Rgba32.ParseHex("#8e9849"),
Rgba32.ParseHex("#c2c190"),
Rgba32.ParseHex("#67765b"),
Rgba32.ParseHex("#ab924b"),
Rgba32.ParseHex("#c8c76f"),
Rgba32.ParseHex("#ccc050"),
Rgba32.ParseHex("#ebdd99"),
Rgba32.ParseHex("#ab9649"),
Rgba32.ParseHex("#dbc364"),
Rgba32.ParseHex("#e6d058"),
Rgba32.ParseHex("#ead665"),
Rgba32.ParseHex("#d09b2c"),
Rgba32.ParseHex("#a36629"),
Rgba32.ParseHex("#a77d35"),
Rgba32.ParseHex("#f0d696"),
Rgba32.ParseHex("#d7c485"),
Rgba32.ParseHex("#f1d28c"),
Rgba32.ParseHex("#efcc83"),
Rgba32.ParseHex("#f3daa7"),
Rgba32.ParseHex("#dfa837"),
Rgba32.ParseHex("#ebbc71"),
Rgba32.ParseHex("#d17c3f"),
Rgba32.ParseHex("#92462f"),
Rgba32.ParseHex("#be7249"),
Rgba32.ParseHex("#bb603c"),
Rgba32.ParseHex("#c76b4a"),
Rgba32.ParseHex("#a75536"),
Rgba32.ParseHex("#b63e36"),
Rgba32.ParseHex("#b5493a"),
Rgba32.ParseHex("#cd6d57"),
Rgba32.ParseHex("#711518"),
Rgba32.ParseHex("#e9c49d"),
Rgba32.ParseHex("#eedac3"),
Rgba32.ParseHex("#eecfbf"),
Rgba32.ParseHex("#ce536b"),
Rgba32.ParseHex("#b74a70"),
Rgba32.ParseHex("#b7757c"),
Rgba32.ParseHex("#612741"),
Rgba32.ParseHex("#7a4848"),
Rgba32.ParseHex("#3f3033"),
Rgba32.ParseHex("#8d746f"),
Rgba32.ParseHex("#4d3635"),
Rgba32.ParseHex("#6e3b31"),
Rgba32.ParseHex("#864735"),
Rgba32.ParseHex("#553d3a"),
Rgba32.ParseHex("#613936"),
Rgba32.ParseHex("#7a4b3a"),
Rgba32.ParseHex("#946943"),
Rgba32.ParseHex("#c39e6d"),
Rgba32.ParseHex("#513e32"),
Rgba32.ParseHex("#8b7859"),
Rgba32.ParseHex("#9b856b"),
Rgba32.ParseHex("#766051"),
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 color2 = new Rgba32(0, 0, 0, 1F);
var color3 = Rgba32.FromHex("#000");
var color4 = Rgba32.FromHex("#000F");
var color5 = Rgba32.FromHex("#000000");
var color6 = Rgba32.FromHex("#000000FF");
var color3 = Rgba32.ParseHex("#000");
var color4 = Rgba32.ParseHex("#000F");
var color5 = Rgba32.ParseHex("#000000");
var color6 = Rgba32.ParseHex("#000000FF");
Assert.Equal(color1, color2);
Assert.Equal(color1, color3);
@ -41,9 +41,9 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats
{
var color1 = new Rgba32(255, 0, 0, 255);
var color2 = new Rgba32(0, 0, 0, 255);
var color3 = Rgba32.FromHex("#000");
var color4 = Rgba32.FromHex("#000000");
var color5 = Rgba32.FromHex("#FF000000");
var color3 = Rgba32.ParseHex("#000");
var color4 = Rgba32.ParseHex("#000000");
var color5 = Rgba32.ParseHex("#FF000000");
Assert.NotEqual(color1, color2);
Assert.NotEqual(color1, color3);
@ -89,7 +89,7 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats
public void FromAndToHex()
{
// 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(187, color.G);
Assert.Equal(204, color.B);

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

@ -60,7 +60,7 @@ namespace SixLabors.ImageSharp.Tests.Colors
[Fact]
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");
Assert.Equal(color.R, (byte)(colorVector.R * 255));

Loading…
Cancel
Save