| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Drawing;
 
- using System.Linq;
 
- using System.Text;
 
- using System.Threading.Tasks;
 
- using static DevExpress.Utils.Drawing.Helpers.NativeMethods;
 
- namespace XdCxRhDW.Sender
 
- {
 
-     public struct ColorRGB
 
-     {
 
-         public byte R;
 
-         public byte G;
 
-         public byte B;
 
-         public ColorRGB(Color value)
 
-         {
 
-             this.R = value.R;
 
-             this.G = value.G;
 
-             this.B = value.B;
 
-         }
 
-         public static implicit operator Color(ColorRGB rgb)
 
-         {
 
-             Color c = Color.FromArgb(rgb.R, rgb.G, rgb.B);
 
-             return c;
 
-         }
 
-         public static explicit operator ColorRGB(Color c)
 
-         {
 
-             return new ColorRGB(c);
 
-         }
 
-         /// <summary>
 
-         /// HSL颜色转RGB
 
-         /// </summary>
 
-         /// <param name="h">色相0-1</param>
 
-         /// <param name="sl">饱和度0-1</param>
 
-         /// <param name="l">透明度0-1</param>
 
-         /// <returns></returns>
 
-         public static ColorRGB HSL2RGB(double h, double sl, double l)
 
-         {
 
-             double v;
 
-             double r, g, b;
 
-             r = l;   // default to gray
 
-             g = l;
 
-             b = l;
 
-             v = (l <= 0.5) ? (l * (1.0 + sl)) : (l + sl - l * sl);
 
-             if (v > 0)
 
-             {
 
-                 double m;
 
-                 double sv;
 
-                 int sextant;
 
-                 double fract, vsf, mid1, mid2;
 
-                 m = l + l - v;
 
-                 sv = (v - m) / v;
 
-                 h *= 6.0;
 
-                 sextant = (int)h;
 
-                 fract = h - sextant;
 
-                 vsf = v * sv * fract;
 
-                 mid1 = m + vsf;
 
-                 mid2 = v - vsf;
 
-                 switch (sextant)
 
-                 {
 
-                     case 0:
 
-                         r = v;
 
-                         g = mid1;
 
-                         b = m;
 
-                         break;
 
-                     case 1:
 
-                         r = mid2;
 
-                         g = v;
 
-                         b = m;
 
-                         break;
 
-                     case 2:
 
-                         r = m;
 
-                         g = v;
 
-                         b = mid1;
 
-                         break;
 
-                     case 3:
 
-                         r = m;
 
-                         g = mid2;
 
-                         b = v;
 
-                         break;
 
-                     case 4:
 
-                         r = mid1;
 
-                         g = m;
 
-                         b = v;
 
-                         break;
 
-                     case 5:
 
-                         r = v;
 
-                         g = m;
 
-                         b = mid2;
 
-                         break;
 
-                 }
 
-             }
 
-             ColorRGB rgb;
 
-             rgb.R = Convert.ToByte(r * 255.0f);
 
-             rgb.G = Convert.ToByte(g * 255.0f);
 
-             rgb.B = Convert.ToByte(b * 255.0f);
 
-             return rgb;
 
-         }
 
-         /// <summary>
 
-         /// 根据一个值生成一个颜色,值越小颜色越浅
 
-         /// </summary>
 
-         /// <param name="value">0-1的一个值</param>
 
-         /// <returns></returns>
 
-         public static Color GetSpecColor(double value)
 
-         {
 
-             if (value == 1)
 
-                 value = 0.99;
 
-             return HSL2RGB(value, value, 0.5);
 
-            
 
-         }
 
-         public static void RGB2HSL(ColorRGB rgb, out double h, out double s, out double l)
 
-         {
 
-             double r = rgb.R / 255.0;
 
-             double g = rgb.G / 255.0;
 
-             double b = rgb.B / 255.0;
 
-             double v;
 
-             double m;
 
-             double vm;
 
-             double r2, g2, b2;
 
-             h = 0; // default to black
 
-             s = 0;
 
-             l = 0;
 
-             v = Math.Max(r, g);
 
-             v = Math.Max(v, b);
 
-             m = Math.Min(r, g);
 
-             m = Math.Min(m, b);
 
-             l = (m + v) / 2.0;
 
-             if (l <= 0.0)
 
-             {
 
-                 return;
 
-             }
 
-             vm = v - m;
 
-             s = vm;
 
-             if (s > 0.0)
 
-             {
 
-                 s /= (l <= 0.5) ? (v + m) : (2.0 - v - m);
 
-             }
 
-             else
 
-             {
 
-                 return;
 
-             }
 
-             r2 = (v - r) / vm;
 
-             g2 = (v - g) / vm;
 
-             b2 = (v - b) / vm;
 
-             if (r == v)
 
-             {
 
-                 h = (g == m ? 5.0 + b2 : 1.0 - g2);
 
-             }
 
-             else if (g == v)
 
-             {
 
-                 h = (b == m ? 1.0 + r2 : 3.0 - b2);
 
-             }
 
-             else
 
-             {
 
-                 h = (r == m ? 3.0 + g2 : 5.0 - r2);
 
-             }
 
-             h /= 6.0;
 
-         }
 
-     }
 
- }
 
 
  |