设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2226|回复: 1
打印 上一主题 下一主题

【OneKeyTools源代码分享7】RGB转HSL

[复制链接]
跳转到指定楼层
1#
发表于 2016-8-29 21:04:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 只为设计 于 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;
复制代码



本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖1 订阅订阅

点击这里给我发消息

2#
发表于 2016-8-29 21:20:03 | 只看该作者
赞一个!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-12-1 19:38 , Processed in 0.086101 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表