class HSLColor
    {
        private int _alpha = 255;
        public int _hue = 0;
        public double _saturation = 1d;
        public double _lightness = 1d;
 
        //public double H;
        //public double S;
        //public double L;
        public HSLColor()
        {
 
        }
 
        public HSLColor(Color color)
        {
            _alpha = color.A;
            FromRGB(color);
            //double h = 0;
            //double s = 0;
            //double l = 0;
            //RGB2HSL(color, out h, out s, out l);
            //H = 255 * h;
            //S = 255 * s;
            //L = 255 * l;
        }
 
        private void FromRGB(Color color)
        {
 
            double r = ((double)color.R) / 255;
 
            double g = ((double)color.G) / 255;
 
            double b = ((double)color.B) / 255;
 
 
 
            double min = Math.Min(Math.Min(r, g), b);
 
            double max = Math.Max(Math.Max(r, g), b);
 
            double distance = max - min;
 
 
 
            _lightness = (max + min) / 2;
 
            if (distance == 0)
            {
 
                _hue = 0;
 
                _saturation = 0;
 
            }
 
            else
            {
 
                double hueTmp;
 
                _saturation =
 
                    (_lightness < 0.5) ?
 
                    (distance / (max + min)) : (distance / ((2 - max) - min));
 
                double tempR = (((max - r) / 6) + (distance / 2)) / distance;
 
                double tempG = (((max - g) / 6) + (distance / 2)) / distance;
 
                double tempB = (((max - b) / 6) + (distance / 2)) / distance;
 
                if (r == max)
                {
 
                    hueTmp = tempB - tempG;
 
                }
 
                else if (g == max)
                {
 
                    hueTmp = (0.33333333333333331 + tempR) - tempB;
 
                }
 
                else
                {
 
                    hueTmp = (0.66666666666666663 + tempG) - tempR;
 
                }
 
                if (hueTmp < 0)
                {
 
                    hueTmp += 1;
 
                }
 
                if (hueTmp > 1)
                {
 
                    hueTmp -= 1;
 
                }
 
                _hue = (int)(hueTmp * 250);
                _saturation = _saturation * 240;
                _lightness = _lightness * 200;
            }
 
        }
 
         public static void RGB2HSL(Color 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;
 
         }
    }

最新文章

  1. Java_类似java.lang.VerifyError: Expecting a stackmap frame at branch target 22 in method的解决方法
  2. 你的联动够快够小吗——基于Telerik(ASP.NET平台)
  3. Sequence operation(线段树区间多种操作)
  4. android软键盘弹出隐藏的监听
  5. 文件查找和比较命令 来自: http://man.linuxde.net/find
  6. javaWeb学习总结(11)- 监听器(Listener)学习
  7. 使用KeePass愉快的来管理你的密码
  8. Linux硬链接软连接
  9. HDU 1874 畅通工程续【Floyd算法实现】
  10. token:NLP之词形还原
  11. javascript 执行环境,作用域、作用域链、闭包
  12. 微信小程序云端解决方案探索之路
  13. 对比手机SLAM和机器人SLAM
  14. sp_executesql动态执行sql语句并将结果赋值给一变量
  15. MySQL数据库行去重复
  16. CTF中的变量覆盖漏洞
  17. IO操作中的建议
  18. 度度熊有一张网格纸,但是纸上有一些点过的点,每个点都在网格点上,若把网格看成一个坐标轴平行于网格线的坐标系的话,每个点可以用一对整数x,y来表示。度度熊必须沿着网格线画一个正方形,使所有点在正方形的内部或者边界。然后把这个正方形剪下来。问剪掉正方形的最小面积是多少。
  19. thinkcmf5增加微信管理app笔记
  20. null in JavaScript

热门文章

  1. 【转】CentOS 6.3(x86_64)下安装Oracle 10g R2
  2. Cisco配置aaa验证
  3. JVM类加载机制---类加载的过程
  4. Effective Java 之 --- 用私有构造器或者枚举类型强化Singleton属性
  5. ABP官方文档翻译 7.1 后台Jobs和Workers
  6. Vue.js搭建路由报错 router.map is not a function,Cannot read property ‘component’ of undefined
  7. ctags的使用
  8. HDU 4333 [SAM WRONG!!!]
  9. JAVAEE——BOS物流项目03:学习计划、messager、menubutton、登陆拦截器、信息校验和取派员添加功能
  10. SQL Server 页面查询超时(SOS_SCHEDULER_YIELD等待)