RGB 和 HSL 颜色转换,更友好的 API?

比如把 RGB #86DEFA 转换成 HSL,Converting Colors - Hex - 86DEFA 给出 194°, 92%, 75%,而用 Emacs 的 color-rgb-to-hsl 会遇到两个麻烦,一是要转换参数,把 0x00 - 0xFF 变成 0 - 1 之间的小数,二是要把结果转换,Hue 应该是角度,饱和度亮度应该是百分比。

(color-rgb-to-hsl (/ #x86 255.0)
                  (/ #xDE 255.0)
                  (/ #xFA 255.0))
;; => (0.5402298850574713 0.9206349206349207 0.7529411764705882)

大家有没有了解现成的代码?或者有写过可以分享。

以前用其它语言写过,emacs上没写过,假设色彩已经转换为255的表述,继续的转换公式如下,楼主可以自己实现看看:

设颜色C=[R,G,B]P=0.5*[max(C)-min(C)], A=(G-B)/P

L=0.5*[max(C)+min(C)]
S=P, if P=0
    P/L, if L<0.5
    P/(1-L), other
H=P, if P=0
     30xabs(A)+180*(1-[abs(A)/A]), if max(C)=R
     30x(B-R)/P+120, if max(C)=G
     30x(R-G)/P+240, if max(C)=B
1 个赞