private static bool TryParseQ8(string value, List <QuantumType> channels) { int size = 0; if (value.Length == 4 || value.Length == 5) { size = 1; } else if (value.Length == 3 || value.Length == 7 || value.Length == 9) { size = 2; } else { return(false); } for (int i = 1; i < value.Length; i += size) { if (!TryParseHex(value, i, size, out ushort channel)) { return(false); } channels.Add(Quantum.Convert((byte)channel)); } return(true); }
private static QuantumType ParseHexQ8(string color, int offset) { ushort result = 0; ushort k = 1; int i = 3; while (i >= 0) { char c = color[offset + i]; if (c >= '0' && c <= '9') { result += (ushort)(k * (c - '0')); } else if (c >= 'a' && c <= 'f') { result += (ushort)(k * (c - 'a' + '\n')); } else if (c >= 'A' && c <= 'F') { result += (ushort)(k * (c - 'A' + '\n')); } else { throw new ArgumentException("Invalid character: " + c + ".", nameof(color)); } i--; k = (ushort)(k * 16); } return(Quantum.Convert(result)); }
private void Initialize(byte red, byte green, byte blue, byte alpha) { R = Quantum.Convert(red); G = Quantum.Convert(green); B = Quantum.Convert(blue); A = Quantum.Convert(alpha); K = 0; }
/// <summary> /// Initializes the color with the specified bytes. /// </summary> /// <param name="red">Red component value of this color.</param> /// <param name="green">Green component value of this color.</param> /// <param name="blue">Blue component value of this color.</param> /// <param name="alpha">Alpha component value of this color.</param> public void SetFromBytes(byte red, byte green, byte blue, byte alpha) { R = Quantum.Convert(red); G = Quantum.Convert(green); B = Quantum.Convert(blue); A = Quantum.Convert(alpha); K = 0; IsCmyk = false; }
private static IEnumerable <QuantumType> ParseQ8(string value) { byte red; byte green; byte blue; byte alpha; if (value.Length == 3) { yield return(Quantum.Convert((byte)ParseHex(value, 1, 2))); } else if (value.Length == 4 || value.Length == 5) { red = (byte)ParseHex(value, 1, 1); red += (byte)(red * 16); yield return(Quantum.Convert(red)); green = (byte)ParseHex(value, 2, 1); green += (byte)(green * 16); yield return(Quantum.Convert(green)); blue = (byte)ParseHex(value, 3, 1); blue += (byte)(blue * 16); yield return(Quantum.Convert(blue)); if (value.Length == 5) { alpha = (byte)ParseHex(value, 4, 1); alpha += (byte)(alpha * 16); yield return(Quantum.Convert(alpha)); } } else if (value.Length == 7 || value.Length == 9) { red = (byte)ParseHex(value, 1, 2); yield return(Quantum.Convert(red)); green = (byte)ParseHex(value, 3, 2); yield return(Quantum.Convert(green)); blue = (byte)ParseHex(value, 5, 2); yield return(Quantum.Convert(blue)); if (value.Length == 9) { alpha = (byte)ParseHex(value, 7, 2); yield return(Quantum.Convert(alpha)); } } else { throw new ArgumentException("Invalid hex value.", nameof(value)); } }
private void ParseQ8HexColor(string color) { byte red; byte green; byte blue; byte alpha = 255; if (color.Length == 3) { red = green = blue = (byte)ParseHex(color, 1, 2); } else if (color.Length == 4 || color.Length == 5) { red = (byte)ParseHex(color, 1, 1); red += (byte)(red * 16); green = (byte)ParseHex(color, 2, 1); green += (byte)(green * 16); blue = (byte)ParseHex(color, 3, 1); blue += (byte)(blue * 16); if (color.Length == 5) { alpha = (byte)ParseHex(color, 4, 1); alpha += (byte)(alpha * 16); } } else if (color.Length == 7 || color.Length == 9) { red = (byte)ParseHex(color, 1, 2); green = (byte)ParseHex(color, 3, 2); blue = (byte)ParseHex(color, 5, 2); if (color.Length == 9) { alpha = (byte)ParseHex(color, 7, 2); } } else { throw new ArgumentException("Invalid hex value."); } Initialize(Quantum.Convert(red), Quantum.Convert(green), Quantum.Convert(blue), Quantum.Convert(alpha)); }
private static bool TryParseQ16(string value, List <QuantumType> channels) { if (value.Length != 13 && value.Length != 17) { return(false); } for (int i = 1; i < value.Length; i += 4) { if (!TryParseHex(value, i, 4, out ushort channel)) { return(false); } channels.Add(Quantum.Convert(channel)); } return(true); }