【问题标题】:Color as background using rgb codes that will constantly change according to time使用 rgb 代码作为背景颜色,该代码将根据时间不断变化
【发布时间】:2015-02-27 04:20:16
【问题描述】:
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% 的蓝色。这有意义吗?我是初学者,非常感谢任何帮助。

【问题讨论】:

    标签: vb.net colors background


    【解决方案1】:

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

    您基本上将 0-24 小时延长到 0-255 的值,其中 Hour=0 对应于 Red=0,Hour=24 对应于 Red=255。

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

    这与您的“11% 红色”方法非常相似。 其他部分的定义类似,

    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)
    

    但这也不会为您提供完整的颜色范围(即使 255 的 59% 也只有 150,因此您永远不会看到介于 150 和 255 之间的值)。线性插值是要走的路。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-19
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      相关资源
      最近更新 更多