ffMathy

Generate random pretty and distinctive color

Feb 19th, 2012
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.08 KB | None | 0 0
  1.     public static class ColorHelper
  2.     {
  3.         public static IEnumerable<Color> GetRandomColors(int amount)
  4.         {
  5.             var results = new List<Color>();
  6.  
  7.             var random = new Random();
  8.  
  9.             var threshold = amount / 2d;
  10.  
  11.             var maxAmount = Math.Min(amount, threshold);
  12.             var div = amount - maxAmount;
  13.             var difference = 360d / maxAmount;
  14.  
  15.             //ændr denne variabel til 1.0 for at få pænere (skarpere farver).
  16.             double prettiness = 0.25;
  17.  
  18.             for (double i = 0.0, o = 0.0; i < amount || o < 1; i++, o+= (1.0 - prettiness) / div)
  19.             {
  20.                 results.Add(HsvToRgb(i * difference, 1.0, prettiness + o));
  21.             }
  22.  
  23.             return results;
  24.         }
  25.  
  26.         public static Color GetRgb(double r, double g, double b)
  27.         {
  28.             return Color.FromArgb(255, (byte)(r * 255.0), (byte)(g * 255.0), (byte)(b * 255.0));
  29.         }
  30.  
  31.         public static Color HsvToRgb(double h, double s, double v)
  32.         {
  33.             int hi = (int)Math.Floor(h / 60.0) % 6;
  34.             double f = (h / 60.0) - Math.Floor(h / 60.0);
  35.  
  36.             double p = v * (1.0 - s);
  37.             double q = v * (1.0 - (f * s));
  38.             double t = v * (1.0 - ((1.0 - f) * s));
  39.  
  40.             Color ret;
  41.  
  42.             switch (hi)
  43.             {
  44.                 case 0:
  45.                     ret = GetRgb(v, t, p);
  46.                     break;
  47.                 case 1:
  48.                     ret = GetRgb(q, v, p);
  49.                     break;
  50.                 case 2:
  51.                     ret = GetRgb(p, v, t);
  52.                     break;
  53.                 case 3:
  54.                     ret = GetRgb(p, q, v);
  55.                     break;
  56.                 case 4:
  57.                     ret = GetRgb(t, p, v);
  58.                     break;
  59.                 case 5:
  60.                     ret = GetRgb(v, p, q);
  61.                     break;
  62.                 default:
  63.                     ret = Color.FromArgb(0xFF, 0x00, 0x00, 0x00);
  64.                     break;
  65.             }
  66.             return ret;
  67.         }
  68.     }
Advertisement
Add Comment
Please, Sign In to add comment