/// <inheritdoc/> public override object ConvertFrom(CultureInfo culture, string value, Type propertyType) { if (string.IsNullOrWhiteSpace(value)) { return(base.ConvertFrom(culture, value, propertyType)); } // Special case. HTML requires LightGrey, but NamedColors has LightGray to conform with System.Drawing // Check early on. if (value.Equals("LightGrey", StringComparison.OrdinalIgnoreCase)) { return(Rgba32.LightGray); } // Numeric r,g,b - r,g,b,a char separator = culture.TextInfo.ListSeparator[0]; if (value.Contains(separator.ToString())) { string[] components = value.Split(separator); bool convert = true; foreach (string component in components) { if (!NumberRegex.IsMatch(component)) { convert = false; } } if (convert) { List <byte> rgba = CommandParser.Instance.ParseValue <List <byte> >(value); return(rgba.Count == 4 ? ColorBuilder <Rgba32> .FromRGBA(rgba[0], rgba[1], rgba[2], rgba[3]) : ColorBuilder <Rgba32> .FromRGB(rgba[0], rgba[1], rgba[2])); } } // Hex colors rgb, rrggbb, rrggbbaa if (HexColorRegex.IsMatch(value)) { return(Rgba32.FromHex(value)); } // Named colors IDictionary <string, Rgba32> table = ColorConstantsTable.Value; return(table.ContainsKey(value) ? table[value] : base.ConvertFrom(culture, value, propertyType)); }
public static void ToImage(this MatrixData input, string fileName) { using (Image <Rgba32> image = new Image <Rgba32>(input.NumberOfRows, input.NumberOfColumns)) { for (int r = 0; r < input.NumberOfRows; r++) { for (int c = 0; c < input.NumberOfColumns; c++) { byte b = byte.Parse(((double)input[r, c]).ToString()); image[r, c] = ColorBuilder <Rgba32> .FromRGB(b, b, b); } } image.SaveAsBmp(File.OpenWrite(fileName)); } }