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%蓝色。这有意义吗?我是初学者,非常感谢任何帮助。
答案 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之间的值)。线性插值是可行的方法。