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;
 
         }
    }

WPF将RGB转为HSL的工具类的更多相关文章

  1. Java学习-041-颜色工具类(RGB,HEX)

    在日常的网页开发中,经常需要进行颜色数值获取.转换,例如获取红色,获取蓝色,获取绿色,RGB转十六进制颜色,十六进制颜色转RGB等,因而在学习过程中,写了一个小工具类,仅供各位小主参考! 多不闲言,直 ...

  2. ColorUtil【Color工具类(color整型、rgb数组、16进制互相转换)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 主要用于color整型.rgb数组.16进制互相转换(-12590395 <--> #3FE2C5 <--> ...

  3. ColorCode是一个在线随机取色工具,可以随机获取十六进制、RGB、HSl等颜色。

    ColorCode是一个在线随机取色工具,可以随机获取十六进制.RGB.HSl等颜色. ColorCode 彩蛋爆料直击现场 ColorCode是一个在线随机取色工具,可以随机获取十六进制.RGB.H ...

  4. Java_常用工具类收集

    一.日期工具类 package com.ebd.application.common.utils; import java.sql.Timestamp; import java.text.DateFo ...

  5. java操作excel 工具类

    java操作excel 可参考https://blog.csdn.net/xunwei0303/article/details/53213130 直接上代码: 一.java生成excel文件: pac ...

  6. 随笔分类 - Android之工具类

    Android之文件搜索工具类 /** * @detail 搜索sdcard文件 * @param 需要进行文件搜索的目录 * @param 过滤搜索文件类型 */ private void sear ...

  7. App开发流程之加密工具类

    科技优家 2016-09-08 18:10 从这篇记录开始,记录的都算是干货了,都是一些编程日常的积累. 我建议先将基础的工具加入项目,后续的开发效率会呈指数增长.如果在专注功能开发过程中,才发现缺少 ...

  8. Java生成带小图标的二维码-google zxing 工具类

    近期一直忙于开发微信商城项目,应客户要求,要开发个有图标的二维码.经过两次改版,终于实现了该功能(第一次没有小图标,这次才整合好的),如下是完整代码 . 该代码使用Java7开发,另外使用 core- ...

  9. 文件类型工具类:FileTypeUtil

    个人学习,仅供参考! package com.example.administrator.filemanager.utils;import java.io.File;/** * 文件类型工具类 * * ...

随机推荐

  1. Struts2 (一)

    1 三层架构 2 MVC框架的原理 3 什么是Struts2 Struts2是一个非常优秀的MVC框架,基于Model2设计模式. 是由传统的Struts1和WebWork两个经典的框架发展而来的. ...

  2. Linux安装Tomcat7

    linux版本:CentOS 6.2 iso文件下载地址:http://mirrors.163.com/centos/6.2/isos/i386/CentOS-6.2-i386-bin-DVD1.is ...

  3. 2018-01-28-M个本地工作点代码同步到N个GIT远端

    layout: post title: 2018-01-28-M个本地工作点代码同步到N个GIT远端 key: 20180128 tags: IT GIT modify_date: 2018-01-2 ...

  4. NOI2001 食物链

    食物链 题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种 ...

  5. 面试中的DNS

    DNS 当DNS客户机需要在程序中使用名称时,它会查询DNS服务器来解析该名称.客户机发送的每条查询信息包括三条信息:指定的DNS域名,指定的查询类型,DNS域名的指定类别. DNS基于UDP服务,端 ...

  6. API函数详解:API大全总目录(按字母排列)

    API函数详解 http://www.feiesoft.com/api/api.html

  7. 读Ghost博客源码与自定义Ghost博客主题

    我使用的Ghost博客一直使用者默认的Casper主题.我向来没怎么打理过自己博客,一方面认为自己不够专业,很难写出质量比较高的文字:另一方面认为博客太耗时间,很容易影响正常的工作内容.最近公司即将搬 ...

  8. cglib应用

    JDK的动态代理,经常被用来动态地创建对象的代理.JDK的动态代理用起来非常简单,但是有一个限制,就是使用动态代理的对象必须实现一个或多个接口.如果想代理没有实现接口,还可以使用cglib包来完成代理 ...

  9. 【STL】c++ priority_queue的使用方法

    最开始在项目文档看到priority_queue这个模板时,还以为是自己定义的呢,后来查了一下,原来这是STL中存在的一种优先队列. 1.最简单的使用方法 std::priority_queue< ...

  10. Nginx调用远程php-fpm

    在Nginx服务器的情况下,当我们输入 http://localhost:8080/index.php回车的时候 浏览器会将请求发送给Nginx,Nginx会根据我们所配置的以.php结尾的PHP的文 ...