設為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

返回列表 發(fā)新帖
查看: 2507|回復: 1
打印 上一主題 下一主題

【OneKeyTools源代碼分享7】RGB轉(zhuǎn)HSL

[復制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 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.         }
復制代碼
這是我根據(jù)維基百科上的公式做出的C#代碼
該代碼用于我開發(fā)的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 訂閱訂閱

點擊這里給我發(fā)消息

2#
發(fā)表于 2016-8-29 21:20:03 | 只看該作者
贊一個!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2025-7-17 06:03 , Processed in 0.097352 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表