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. java类加载时执行顺序

    源代码 class HelloA { public HelloA() { System.out.print("A"); } { System.out.print("B&q ...

  2. 【OS】NMON的简介和使用

    [OS]NMON的简介和使用 目前NMON已开源,以sourceforge为根据地,网址是http://nmon.sourceforge.net. 1. 目的 本文介绍操作系统监控工具Nmon的概念. ...

  3. Go基础之--反射

    反射:可以在运行时动态获取变量的相关信息 反射需要导入reflect 反射中重要函数的演示 反射有几下几个重要的函数:reflect.TypeOf :获取变量的类型,返回reflect.Type类型r ...

  4. MessagePack简析

    一.MessagePack是什么 先看官方的定义:MessagePack是一种高效的二进制序列化格式.它允许您像JSON一样在多个语言之间交换数据.但是,它更快并且更小. 从官方定义中,可以有如下的结 ...

  5. xBIM WeXplorer xViewer 基本应用

    目录 基础 xBIM WeXplorer 简要介绍 xBIM WeXplorer xViewer 基本应用 xBIM WeXplorer xViewer 浏览器检查 xBIM WeXplorer xV ...

  6. Java DecimalFormat 用法

    Java 提供 DecimalFormat 类,帮你用最快的速度将数字格式化为你需要的样子.下面是一个例子: importjava.text.DecimalFormat; publicclassTes ...

  7. mystricpy的实现???

    #include<iostream>using namespace std;char* mystrcpy(char* dest,const char* src){char* temp=de ...

  8. 阿里云 virtual memory exhausted: 无法分配内存

    在阿里云买了个云服务器,内存1G.编译php时出现下面的错误: virtual memory exhausted: Cannot allocate memory 问题原因:由于物理内存本身很小,且阿里 ...

  9. chrome下input文本框自动填充背景问题解决

    chrome下input文本框会自动填充背景,只需要给文本框加一个样式即可解决问题 input:-webkit-autofill {-webkit-box-shadow: 0 0 0px 1000px ...

  10. React设计思想

    熟悉一个新技术的关键是熟悉他的特色和理念 React框架本身和我们常用的JavaScript MVC框架,如:AngularJS,Backbone,Ember等,没有直接的可比性.在React的官方博 ...