public static Color GenerateHSLuvColor(bool back = true) { List <double> list = new List <double>(); double h; double s; double l; if (back) { l = rnd.NextDouble() * (90.0 - 55.5) + 55.5; s = rnd.NextDouble() * (67.0 - 40.0) + 40.0; } else { l = rnd.NextDouble() * (55.5 - 10.0) + 10.0; s = rnd.NextDouble() * (99.0 - 30.0) + 30.0; } h = rnd.NextDouble() * (359.0 - 1.0) + 1.0; list.Add(h); list.Add(s); list.Add(l); var col = HsluvConverter.HsluvToRgb(list); var r = Convert.ToByte(col[0] * 255); var g = Convert.ToByte(col[1] * 255); var b = Convert.ToByte(col[2] * 255); return(Color.FromArgb(r, g, b)); }
/// <summary>/// Uses the HSLuv color space (via a package) to create maximally perceptually-distinct colors for use in legends.</summary> private static GH_Colour GetPerceptualColorForTreeItem(double treeCount, double itemPosition) { var HsluvValues = new double[] { (itemPosition / treeCount * 360.0), // Hue, from 0-360 100.0, // Maximimise saturation 50.0 // Halfway brightness }; var RGBRaw = HsluvConverter.HsluvToRgb(HsluvValues); // Values are 0-1 var RGBValues = RGBRaw.Select(value => value * 255).ToList(); // Values now 0-2 var RGBColor = Color.FromArgb((int)RGBValues[0], (int)RGBValues[1], (int)RGBValues[2]); return(new GH_Colour(RGBColor)); }
static void Main(string[] args) { var assembly = Assembly.GetExecutingAssembly(); var resourceName = "JsonSnapshotRev3"; using (Stream stream = assembly.GetManifestResourceStream(resourceName)) using (StreamReader reader = new StreamReader(stream)) { var data = Json.Deserialize(reader.ReadToEnd()) as Dictionary <string, object>; foreach (KeyValuePair <string, object> pair in data) { var expected = pair.Value as Dictionary <string, object>; // test forward functions var test_rgb = HsluvConverter.HexToRgb(pair.Key); AssertTuplesClose(test_rgb, Cast(expected["rgb"])); var test_xyz = HsluvConverter.RgbToXyz(test_rgb); AssertTuplesClose(test_xyz, Cast(expected["xyz"])); var test_luv = HsluvConverter.XyzToLuv(test_xyz); AssertTuplesClose(test_luv, Cast(expected["luv"])); var test_lch = HsluvConverter.LuvToLch(test_luv); AssertTuplesClose(test_lch, Cast(expected["lch"])); var test_hsluv = HsluvConverter.LchToHsluv(test_lch); AssertTuplesClose(test_hsluv, Cast(expected["hsluv"])); var test_hpluv = HsluvConverter.LchToHpluv(test_lch); AssertTuplesClose(test_hpluv, Cast(expected["hpluv"])); // test backward functions test_lch = HsluvConverter.HsluvToLch(Cast(expected["hsluv"])); AssertTuplesClose(test_lch, Cast(expected["lch"])); test_lch = HsluvConverter.HpluvToLch(Cast(expected["hpluv"])); AssertTuplesClose(test_lch, Cast(expected["lch"])); test_luv = HsluvConverter.LchToLuv(test_lch); AssertTuplesClose(test_luv, Cast(expected["luv"])); test_xyz = HsluvConverter.LuvToXyz(Cast(expected["luv"])); AssertTuplesClose(test_xyz, Cast(expected["xyz"])); test_rgb = HsluvConverter.XyzToRgb(Cast(expected["xyz"])); AssertTuplesClose(test_rgb, Cast(expected["rgb"])); AssertAreEqual(HsluvConverter.RgbToHex(test_rgb), pair.Key); // full test AssertAreEqual(HsluvConverter.HsluvToHex(Cast(expected["hsluv"])), pair.Key); AssertAreEqual(HsluvConverter.HpluvToHex(Cast(expected["hpluv"])), pair.Key); AssertTuplesClose(Cast(expected["hsluv"]), HsluvConverter.HexToHsluv(pair.Key)); AssertTuplesClose(Cast(expected["hpluv"]), HsluvConverter.HexToHpluv(pair.Key)); } } Console.WriteLine("Success!"); }