//设已知的(r,g,b)是由同等亮度的纯色(R,G,B)和同等亮度的灰色(k',k',k')线性混合而成的
k = max(r,g,b), K = max(R,G,B) //亮度
max(k',k',k') = k' //(k',k',k')的亮度为k'
K = k' = k <=> max(R,G,B) = k' = max(r,g,b) (*式1*) //三者亮度相同
min(R,G,B) = 0 (*式2*) //由于(R,G,B)是纯色 (*注1*)
(r,g,b) = s * [(R,G,B) - (k',k',k')] + (k',k',k') (*式3*)
//将此s定义为(r,g,b)的饱和度
//并且,(R,G,B)->(r,g,b)的过程,仅仅是混入了没有色相的灰色,
//所以色相并没有改变,也就是,色相(R,G,B) = 色相(r,g,b)
//于是,纯色(R,G,B)就可以表示(r,g,b)的色相
//严格来说,由于色相和亮度无关,所以应当用(1/K)*(R,G,B)表示色相。
//由式2、式3,
=> min(r,g,b) = s * [min(R,G,B) - k'] + k' = 0 - s*k' + k''
=> s = [k' - min(r,g,b)] / k'
=> s = [max(r,g,b) - min(r,g,b)] / max(r,g,b) (*根据式1*)
//式3即、
(R,G,B) = (1/s)*(r,g,b) - (1/s-1)*(k',k',k')
=> (R,G,B) = max(r,g,b) / [max(r,g,b) - min(r,g,b)] * (r,g,b)
- min(r,g,b) / [max(r,g,b) - min(r,g,b)] * (k',k',k')
= max(r,g,b) / [max(r,g,b) - min(r,g,b)] * (r,g,b)
- min(r,g,b) / [max(r,g,b) - min(r,g,b)] * (max(r,g,b),max(r,g,b),max(r,g,b))
//并且,有如下关系成立,
//首先,令 mid(x,y,z) = x + y + z - max(x,y,z) - min(x,y,z)
//方便起见,将 max(R,G,B) mid(R,G,B) min(R,G,B) 写作 MX, MD, MN
//将 max(R,G,B) mid(R,G,B) min(R,G,B) 写作 mx, md, mn
MD md*mx/(mx-mn) - mx*mn/(mx-mn) md - mn
-- = ----------------------------- = -------
MX mx*mx/(mx-mn) - mx*mn/(mx-mn) mx - mn
(*注1*)
// 如果min(R,G,B)?0,则一定可以从(R,G,B)中分解出灰色(x,x,x) (x>0)。
// 而由于(R,G,B)是纯色(没有混入任何灰色),所以必须有min(R,G,B)=0。 |