Office中国论坛/Access中国论坛

标题: 【OneKeyTools源代码分享7】RGB转HSL [打印本页]

作者: 只为设计    时间: 2016-8-29 21:04
标题: 【OneKeyTools源代码分享7】RGB转HSL
本帖最后由 只为设计 于 2016-8-30 14:07 编辑
  1. private int Rgb2Hsl(int r, int g, int b)
  2.         {
  3.             float h = 0;
  4.             float s = 0;
  5.             float l = 0;
  6.             float max = Math.Max(Math.Max(r, g), b);
  7.             float min = Math.Min(Math.Min(r, g), b);

  8.             if (max == min)
  9.             {
  10.                 h = 0;
  11.             }
  12.             else
  13.             {
  14.                 if (max == r)
  15.                 {
  16.                     if (g >= b)
  17.                     {
  18.                         h = 255 / 6 * (g - b) / (max - min) + 0;
  19.                     }
  20.                     else
  21.                     {
  22.                         h = 255 / 6 * (g - b) / (max - min) + 255;
  23.                     }
  24.                 }
  25.                 if (max == g & max != r)
  26.                 {
  27.                     h = 255 / 6 * (b - r) / (max - min) + 255 / 3;
  28.                 }
  29.                 if (max == b && max != g)
  30.                 {
  31.                     h = 255 / 6 * (r - g) / (max - min) + 255 * 2 / 3;
  32.                 }
  33.             }
  34.             if (h >= (int)h + 0.5f)
  35.             {
  36.                 h = (int)h + 1;
  37.             }

  38.             l = (max + min) / 2;
  39.             if (max + min == 255)
  40.             {
  41.                 l = 128;
  42.             }
  43.             if (l >= (int)l + 0.5f)
  44.             {
  45.                 l = (int)l + 1;
  46.             }

  47.             if (l == 0 || max == min)
  48.             {
  49.                 s = 0;
  50.             }
  51.             else
  52.             {
  53.                 if (l <= 255 / 2)
  54.                 {
  55.                     s = 255 * (max - min) / (max + min);
  56.                 }
  57.                 else
  58.                 {
  59.                     s = 255 * (max - min) / (2 * 255 - (max + min));
  60.                 }
  61.             }
  62.             if (s >= (int)s + 0.5f)
  63.             {
  64.                 s = (int)s + 1;
  65.             }

  66.             int hsl = (int)h + (int)s * 256 + (int)l * 256 * 256;
  67.             return hsl;
  68.         }
复制代码
这是我根据维基百科上的公式做出的C#代码
该代码用于我开发的OneKeyTools插件里

使用时

  1. int hsl = Rgb2Hsl(r, g, b);
  2. int h = hsl % 256;
  3. int s = (hsl / 256) % 256;
  4. int l = (hsl / 256 / 256) % 256;
复制代码

上一篇:【2016动画教程-20】新的起点     下一篇:【OneKeyTools源代码分享8】HSL转RGB



作者: tmtony    时间: 2016-8-29 21:20
赞一个!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3