如何通过16进制判断是暗色还是亮色

liyafe1997 2013-03-03 12:46:20
想实现类似QQ面板的功能,当背景是暗色时,文字自动为白色,背景亮色,文字为黑色。
如何通过一颜色代码来判断呢?
...全文
630 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-03-07
  • 打赏
  • 举报
回复
引用 4 楼 c0631106233 的回复:
引用 2 楼 zhao4zhong1 的回复:Visual Basic code?12345678910111213141516171819202122232425262728293031323334353637383940Private Sub c2hsb(ByVal clr As Long)Dim MyR As Single, MyG As Single, MyB A……
谢谢提醒!补上:
Private Function Minimum(ParamArray Vals())
Dim n As Integer, MinVal
On Error Resume Next
    MinVal = Vals(0)
    For n = 1 To UBound(Vals)
        If Vals(n) < MinVal Then MinVal = Vals(n)
    Next n
    Minimum = MinVal
End Function
Private Function Maximum(ParamArray Vals())
Dim n As Integer, MaxVal
On Error Resume Next
    MaxVal = Vals(0)
    For n = 1 To UBound(Vals)
        If Vals(n) > MaxVal Then MaxVal = Vals(n)
    Next n
    Maximum = MaxVal
End Function
threenewbee 2013-03-06
  • 打赏
  • 举报
回复
(r+g+b)/3 > 128黑,否则白!
熊孩子开学喽 2013-03-06
  • 打赏
  • 举报
回复
不知楼主对于"亮"和"暗"如何定义呢? 按照灰度值么? 灰度大于127算"亮"否则就是"暗"的么
lliai 2013-03-06
  • 打赏
  • 举报
回复
用R,G,B来做。
bcrun 2013-03-05
  • 打赏
  • 举报
回复
似乎是要把RGB颜色转换为HSV方式后,看一下V代表的明度来判断吧,你可搜索一下RGB转HSV的代码
酷心 2013-03-04
  • 打赏
  • 举报
回复
将颜色转换成HSV模型,看V值吧,具体可不可行,看楼主的需求……
酷心 2013-03-04
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
Visual Basic code?12345678910111213141516171819202122232425262728293031323334353637383940Private Sub c2hsb(ByVal clr As Long)Dim MyR As Single, MyG As Single, MyB As SingleDim Max As Sing……
楼上粗心了,没有提供Maximum,Minimum的函数,其实就是R,G,B分量中的最大值和最小值。
赵4老师 2013-03-04
  • 打赏
  • 举报
回复
Dim hsbH, hsbS, hsbB As Single
赵4老师 2013-03-04
  • 打赏
  • 举报
回复
Private Sub c2hsb(ByVal clr As Long)
Dim MyR As Single, MyG As Single, MyB As Single
Dim Max As Single, Min As Single
Dim MyS As Single
Dim Delta As Single, MyVal As Single
Dim cc As String * 6
Dim r1, g1, b1 As Byte
On Error Resume Next
    cc = Right("000000" + Hex$(clr), 6)
    b1 = Val("&H" + Left(cc, 2))
    g1 = Val("&H" + Mid(cc, 3, 2))
    r1 = Val("&H" + Right(cc, 2))
    MyR = r1 / 255: MyG = g1 / 255: MyB = b1 / 255
    Max = Maximum(MyR, MyG, MyB)
    Min = Minimum(MyR, MyG, MyB)
    hsbB = Int(Max * 100)
    If Max <> 0 Then
        MyS = (Max - Min) / Max * 100
    Else
        MyS = 0
    End If
    hsbS = MyS
    If hsbS = 0 Then
        hsbH = 0
    Else
        Delta = Max - Min
        Select Case Max
        Case MyR
            MyVal = (MyG - MyB) / Delta
        Case MyG
            MyVal = 2 + (MyB - MyR) / Delta
        Case MyB
            MyVal = 4 + (MyR - MyG) / Delta
        End Select
        MyVal = MyVal * 60
        If MyVal < 0 Then MyVal = MyVal + 360
        hsbH = MyVal
    End If
'   Debug.Print "hsb="; hsbH; " "; hsbS; " "; hsbB
End Sub

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧