寫了一段有關顏色的文章,回顧過去幾篇文章,做一個階段性總結。利用前幾篇文章的心得,推導出快速轉換RGB模式與HSV模式的公式。
RGB模式:用R、G、B三個顏色的分量來表示顏色,分量的取值范圍為[0,255],整數型
HSV模式:用H、S、V三個分量來表示顏色。
分量H:表示顏色的色相,取值[0,360),整數型
分量S:表示顏色的純度,取值[0,1),浮點數型
分量V:表示顏色的亮度,取值[0,1),浮點數型
以上內容,詳細請參看“計算機中的顏色III——HSV表示方法”
1、RGB到HSV
顏色(R,G,B)如何快速轉化到(H,S,V)
參看文章“計算機中的顏色IV——純色、色相色”,“計算機中的顏色V——快速計算顏色的色相值”
令MAX為R、G、B三個分量的最大值;MIN為三個分量的最小值
若MAX=MIN,則
H=0
S=0
V=MAX/255
若MAX≠MIN
當G≥B時
H=(Max-R’+G’-Min+B’-Min)/(Max-Min)×60
S=1-MIN/MAX
V=MAX/255
當G<B時
H=360-(Max-R’+G’-Min+B’-Min)/(Max-Min)×60
S=1-MIN/MAX
V=MAX/255
2、HSV到RGB
顏色(H,S,V)如何快速轉化到(R,G,B)
參看文章“計算機中的顏色VIII——快速計算顏色的偏轉”
顏色(H,S,V)可以看成顏色(0,S,V)順時針偏轉H後得到顏色,其實,就是獲得該顏色MAX與MIN分量
MAX=V×255=255V
若S=0,說明MAX=MIN,此時表示灰度色
R=MAX
G=MAX
B=MAX
若S>0,則令ρ=MAX-MIN=255SV,MIN=MAX-ρ
若H>180,令H’=360-H;反之,令H’=H
令λ=H’/60×ρ
R=2ρ-λ;若R<0,則R=0;若R>ρ,則R=ρ;
G=λ;若G>ρ,則G=ρ;
B=λ-2ρ;若B<0;則B=0;
若H>180,則交換G和B分量的值;反之,不交換。最後
R=R+MIN
G=G+MIN
B=B+MIN
總述,以上是我推導的HSV和RGB的互相轉化公式,比許多網上介紹的原來的公式來的簡單。參看“計算機中的顏色III——HSV表示方法”。