使用rgb代码将颜色作为背景,这些代码将根据时间不断变化

时间:2014-12-31 01:23:04

标签: vb.net colors background

Public Class Form1
    Private Sub Timer1_Tick() Handles Timer1.Tick
        Label1.Text = TimeOfDay
        Label2.Text = System.DateTime.Now.ToString("MM/d/yyy")
        Me.BackColor = ColorTranslator.FromHtml("#" & DateAndTime.Now.ToString("HHmmss"))
        Label1.ForeColor = Color.White
        Label2.ForeColor = Color.White
    End Sub
End Class

在上面的代码中,背景颜色会根据时间变为十六进制颜色代码。但是,我想改变这个,因为这些代码附带的颜色太暗了。

相反,我正在寻找代码,使背景颜色为红色,绿色和蓝色容器中的%。 (RGB颜色)

对于前者,如果时间是11:22:33,那么我希望背景颜色为11%红色,22%绿色和33%蓝色。这有意义吗?我是初学者,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

如果要使用全色范围,则需要在0到255之间进行插值,并将插值用作红色,绿色或蓝色值,而不是直接使用时间分量。这是因为颜色分量每个都表示1个字节。

你基本上将0-24小时拉伸到0-255的值,其中小时= 0对应红色= 0而小时= 24对应红色= 255。

Dim R As Byte = CByte(Date.Now.Hour / 23 * 255)

这与你的" 11%Red"非常相似做法。 其他部分的定义类似,

Dim G As Byte = CByte(Date.Now.Minute / 59 * 255)
Dim B As Byte = CByte(Date.Now.Second / 59 * 255)

线性插值公式一般是

New_Value = (Value - Min) / (Max - Min) * (New_Max - New_Min) + New_Min

这里Min和New_Min为0,这有点简化了公式。

要实际分配颜色,您不需要通过构建HTML颜色来设置颜色。您只需使用Color.FromArgb功能即可。只需在Visual Studio中输入即可。出于某种原因,IntelliSense(在IDE中键入时显示可用方法的功能)在某些情况下隐藏了该功能。

Me.BackColor = Color.FromArgb(R, G, B)

这与HTML方法没什么不同,只是更简单(#321224值只是以十六进制表示的三个字节,以#RRGGBB)的形式。


从最严格的意义上说,上面的答案并不完全是你想要使用的。要使用基于百分比的方法,您可以将RGB值构造为

Dim R As Byte = CByte(Date.Now.Hour / 100 * 255)
Dim G As Byte = CByte(Date.Now.Minute / 100 * 255)
Dim B As Byte = CByte(Date.Now.Second / 100 * 255)

但是这也不会让你产生全彩色范围(即使55%的255只是150,所以你永远不会看到150到255之间的值)。线性插值是可行的方法。