r壹樣長,g壹樣長,b壹樣長,_
h表示單身,s表示單身,l表示單身_
)
將最大值調成單個
Dim Min As Single
將增量變暗為單個
Dim rR為單個,rG為單個,rB為單個
rR = r / 255: rG = g / 255: rB = b / 255
{給定:rgb各in,s in [0,1],除非s=0,那麽h=UNDEFINED。}
Max =最大值(rR、rG、rB)
Min =最小值(rR、rG、rB)
l =(Max+Min)/2 ' {這是明度}
{下壹次計算飽和度}
如果最大=最小,則
開始{死亡病例}
s = 0
h = 0
結束{死亡病例}
其他
開始{半音階大小寫}
{首先計算飽和度。}
如果我& lt那麽= 0.5
s =(最大值-最小值)/(最大值+最小值)
其他
s =(最大-最小)/ (2 -最大-最小)
如果…就會結束
{接下來計算色調。}
delta =最大-最小
如果rR = Max,則
h =(rG-rB)/delta {結果顏色介於黃色和洋紅色之間}
ElseIf rG = Max Then
h = 2+(r b-rR)/delta ' {生成的顏色介於青色和黃色之間}
ElseIf rB = Max Then
h = 4+(rR-rG)/delta ' {結果顏色介於洋紅色和青色之間}
如果…就會結束
調試。打印h
h = h * 60
如果h & lt0#然後
h = h+360“{使度數非負}
如果…就會結束
end {Chromatic Case}
如果…就會結束
結束{RGB_to_HLS}
末端接頭
公共子HLSToRGB( _
h是單身,s是單身,l是單身,_
r壹樣長,g壹樣長,b壹樣長_
)
Dim rR為單個,rG為單個,rB為單個
最小尺寸為單個,最大尺寸為單個
如果s = 0,則
消色差盒:
rR = l: rG = l: rB = l
其他
彩色表殼:
delta =最大-最小
如果我& lt那麽= 0.5
s =(最大值-最小值)/(最大值+最小值)
獲取最小值:
最小值= l * (1 - s)
其他
s =(最大-最小)/ (2 -最大-最小)
獲取最小值:
Min = l - s * (1 - l)
如果…就會結束
獲取最大值:
最大值= 2 *最小長度
現在,根據部門,我們可以評估h、l、s:
if(h & lt;1)然後
rR =最大
if(h & lt;0)然後
rG =最小值
rB = rG - h *(最大-最小)
其他
rB =最小值
rG = h *(最大-最小)+ rB
如果…就會結束
else if(h & lt;3)然後
rG =最大
if(h & lt;2)然後
rB =最小值
rR = rB - (h - 2) *(最大-最小)
其他
rR =最小值
rB = (h - 2) *(最大-最小)+ rR
如果…就會結束
其他
rB =最大
if(h & lt;4)然後
rR =最小值
rG = rR - (h - 4) *(最大-最小)
其他
rG =最小值
rR = (h - 4) *(最大-最小)+ rG
如果…就會結束
如果…就會結束
如果…就會結束
r = rR * 255: g = rG * 255: b = rB * 255
末端接頭
私人功能最大值(rR為單個,rG為單個,rB為單個)為單個
if(rR & gt;rG)那麽
if(rR & gt;rB)那麽
最大值= rR
其他
最大=經常預算
如果…就會結束
其他
if(rB & gt;rG)那麽
最大=經常預算
其他
最大值= rG
如果…就會結束
如果…就會結束
結束功能
私人功能最小值(rR為單個,rG為單個,rB為單個)為單個
if(rR & lt;rG)那麽
if(rR & lt;rB)那麽
最小值= rR
其他
最小值=經常預算
如果…就會結束
其他
if(rB & lt;rG)那麽
最小值=經常預算
其他
最小值= rG
如果…就會結束
如果…就會結束
結束功能
參考資料:
/t/20050318/23/3863239 . html