注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

沉默蜂B4A安卓编程

国内资料最全的B4A资料库

 
 
 

日志

 
 

[类] 颜色盘ColorPalette  

2014-08-21 16:13:13|  分类: B.图形 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
[类] 颜色盘ColorPalette - 沉默蜂 - 沉默蜂B4A安卓编程实战资料
颜色选择器效果图

 
[类] 颜色盘ColorPalette - 沉默蜂 - 沉默蜂B4A安卓编程实战资料
颜色选择器效果图



下面是此类模块中的几个方法

‘将一个颜色值通内部处理后返回一个包含透明度的颜色值
Public Sub ParseColor(clr As Int) As Int()

Dim res(4) As Int
res(0) = Bit.UnsignedShiftRight(Bit.AND(clr, 0xff000000), 24) ' alfa透明度
res(1) = Bit.UnsignedShiftRight(Bit.AND(clr, 0xff0000), 16)   ' R红色
res(2) = Bit.UnsignedShiftRight(Bit.AND(clr, 0xff00), 8)      ' G绿色
res(3) = Bit.AND(clr, 0xff)  ' B蓝色
Return res

End Sub



’将HSL转换成RGB值
'Returns the RGB color of  Lum,Sat and Hue parameters.
Public Sub HSLToRGB(H As Float,S As Float ,L As Float) As Int

Dim  k As Int
Dim H0 ,M1 ,M0 , D As Float
Dim col As Int
If H = 240 Then  H = 0  ' 240 identical To 0
H0 =  H / 40
If L < 120 Then
M1=255*L*(1+S/240)/240
M0=255*L*(1-S/240)/240
Else
M1=255*(L/240*(1-S/240)+S/240)
M0=255*(L/240*(1+S/240)-S/240)
End If
D = M1 - M0 
k = H0
Select k
Case 0
col = Colors.Rgb(M1 ,M0+H0*D,M0)
Case 1
col = Colors.Rgb(M0+(2-H0)*D,M1,M0)
Case 2
col = Colors.Rgb(M0,M1,M0+(H0-2)*D) 
Case 3
col = Colors.Rgb(M0,M0+(4-H0)*D,M1) 
Case 4
col = Colors.Rgb(M0+(H0-4)*D,M0,M1)
Case 5
col = Colors.Rgb(M1,M0,M0+(6-H0)*D)
End Select
Return col
End Sub

‘将COLOR值转成HSL值
'Returns a Int array with Lum,Sat,Hue (by that order) from a color.
Public Sub COLORtoHSL(clr As Int) As Int()

Dim R,G ,B As Float
Dim maxcolor,mincolor, D, P As Float
Dim res(4) As Int

res(0) = Bit.UnsignedShiftRight(Bit.AND(clr, 0xff000000), 24) ' alfa
res(1) = Bit.UnsignedShiftRight(Bit.AND(clr, 0xff0000), 16)   ' R
res(2) = Bit.UnsignedShiftRight(Bit.AND(clr, 0xff00), 8)      ' G
res(3) = Bit.AND(clr, 0xff)                                   ' B

R = res(1)/255   ' between 0 to 1
G = res(2)/255
B = res(3)/255
maxcolor = Max(Max(R,G),B)
mincolor = Min(Min(R,G),B)
D = maxcolor - mincolor
P = maxcolor + mincolor
Lum = P/2
If maxcolor = mincolor OR Lum = 0  Then 
Sat = 0
Else
If Lum < 0.5 Then
Sat = D/P
Else
Sat = D/(2.0 - P)
End If
End If
If maxcolor = mincolor Then
Hue = 0
Else
Select maxcolor
Case R 
Hue = ((G-B)/D)/6 
Case G
Hue = (2 + (B-R)/D)/6
Case B
Hue = (4 + (R-G)/D)/6
End Select
If Hue < 0 Then Hue = Hue + 1
End If

lumcursor.Top = lumpnl.Height*(1 - Lum)  - lumcursor.Height/2
pltcursor.Left = Hue * palette.Width - pltcursor.Width/2
pltcursor.Top =  palette.Height * (1 -  Sat) - pltcursor.Height/2
Lum = Lum * 240 
Sat = Sat * 240 
Hue = Hue * 240 
res(0) = Lum
res(1) = Sat
res(2) = Hue

Return res

End Sub
  评论这张
 
阅读(107)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017