标签背景颜色混合

Label background color mix

我有三个标签和一个按钮。我想随机化 label1 和 label2 的背景颜色,条件是 label1 和 label2 的颜色不同,单击按钮我想获得 label3 背景颜色,这是 label1 颜色和 label1 颜色之间的混合颜色标签 2 颜色。 在我的代码中,我有一些颜色的颜色列表。 我只想随机化包含在我的颜色列表中的颜色 感谢您的帮助

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    ' Create a List
    Dim colorList As New List(Of SolidBrush)

    ' Add colors to it
    'red
    colorList.Add(New SolidBrush(Color.FromArgb(100, 255, 0, 0)))
    'white
    colorList.Add(New SolidBrush(Color.FromArgb(100, 255, 255, 255)))
    'Blue 
    colorList.Add(New SolidBrush(Color.FromArgb(100, 0, 0, 255)))
    'Yellow 
    colorList.Add(New SolidBrush(Color.FromArgb(100, 244, 255, 16)))
    'Green 
    colorList.Add(New SolidBrush(Color.FromArgb(100, 0, 255, 0)))
    'Pink 
    colorList.Add(New SolidBrush(Color.FromArgb(100, 255, 16, 22)))
    'Brown 
    colorList.Add(New SolidBrush(Color.FromArgb(100, 120, 37, 37)))
    Dim rnd = New Random()

    ' Get a random item from the list between 0 and list count
    Dim randomColour = colorList(rnd.Next(0, colorList.Count))
    Dim randomColour1 = colorList(rnd.Next(0, colorList.Count))

    ' Assign the color to the label

    Label1.BackColor = randomColour.Color
    Label1.Text = randomColour.Color.Name.ToString
    Label2.BackColor = randomColour1.Color
    Label3.BackColor = (Color.FromArgb(Label1.BackColor.ToArgb + Label2.BackColor.ToArgb))
End Sub

您不应在每次单击时都创建一个新的随机 class。只做一个class级变量。 混合颜色采用颜色的每个分量(R、G、B)并对值取平均值。然后根据平均值创建新颜色。 其余部分不言自明。

你只需要一个列表(颜色)

Private rnd As New Random()

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim colorList As New List(Of Color)
    ' Add colors to it
    'red
    colorList.Add(Color.FromArgb(255, 0, 0))
    'white
    colorList.Add(Color.FromArgb(255, 255, 255))
    'Blue 
    colorList.Add(Color.FromArgb(0, 0, 255))
    'Yellow 
    colorList.Add(Color.FromArgb(244, 255, 16))
    'Green 
    colorList.Add(Color.FromArgb(0, 255, 0))
    'Pink 
    colorList.Add(Color.FromArgb(255, 16, 22))
    'Brown 
    colorList.Add(Color.FromArgb(120, 37, 37))
    ' Get a random item from the list between 0 and list count
    Dim randomColour = colorList(rnd.Next(0, colorList.Count))
    Dim randomColour1 = colorList(rnd.Next(0, colorList.Count))
    ' Get the name of the color to display in the label
    Dim ColorName1 As String = GetColorName(randomColour.Name)
    Dim ColorName2 As String = GetColorName(randomColour1.Name)
    'Set the text color depending on the back color
    If ColorName1 = "White" OrElse ColorName1 = "Yellow" Then
        Label1.ForeColor = Color.Black
    Else
        Label1.ForeColor = Color.White
    End If
    If ColorName2 = "White" OrElse ColorName2 = "Yellow" Then
        Label2.ForeColor = Color.Black
    Else
        Label2.ForeColor = Color.White
    End If
   'Set the back color and text of the labels.
    Label1.BackColor = randomColour
    Label1.Text = ColorName1
    Label2.BackColor = randomColour1
    Label2.Text = ColorName2
    Label3.BackColor = MixColors(randomColour, randomColour1)
End Sub

Private Function MixColors(Color1 As Color, Color2 As Color) As Color
    Dim r As Byte = CByte((Color1.R * 0.5) + (Color2.R * 0.5))
    Dim g As Byte = CByte((Color1.G * 0.5) + (Color2.G * 0.5))
    Dim b As Byte = CByte((Color1.B * 0.5) + (Color2.B * 0.5))
    Return Color.FromArgb(r, g, b)
End Function

Private Function GetColorName(name As String) As String
    Select Case name
        Case "ffff0000"
            Return "Red"
        Case "ffffffff"
            Return "White"
        Case "ff0000ff"
            Return "Blue"
        Case "fff4ff10"
            Return "Yellow"
        Case "ff00ff00"
            Return "Green"
        Case "ffff1016"
            Return "Pink"
        Case "ff782525"
            Return "Brown"
        Case Else
            Return "No match"
    End Select
End Function