Warnai sebagai background menggunakan kode RGB yang akan terus berubah sesuai waktu

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

Pada kode saya di atas, warna latar belakang berubah menjadi kode warna hex tergantung jam berapa. Namun, saya ingin mengubahnya karena warna yang disertakan dengan kode ini terlalu gelap.

Sebaliknya saya mencari kode untuk membuat warna latar belakang % dalam wadah merah, hijau, dan biru. (Warna RGB)

Misalnya, jika waktu menunjukkan 11:22:33, maka saya ingin warna latar belakang menjadi 11% merah, 22% hijau, dan 33% biru. Apakah ini masuk akal? Saya seorang pemula, dan bantuan apa pun sangat dihargai.


person Lilly    schedule 31.12.2014    source sumber


Jawaban (1)


Anda perlu melakukan interpolasi antara 0 dan 255 dan menggunakan nilai interpolasi sebagai nilai merah, hijau, atau biru, daripada menggunakan komponen waktu secara langsung, jika Anda ingin menggunakan rentang warna penuh. Hal ini karena komponen warna masing-masing diwakili 1 Byte.

Pada dasarnya Anda meregangkan 0-24 jam ke nilai 0-255, di mana Jam=0 berkorespondensi dengan Merah=0 dan Jam=24 berkorespondensi dengan Merah=255.

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

Ini sangat mirip dengan pendekatan "11% Merah" Anda. Bagian lain akan didefinisikan serupa,

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

Rumus interpolasi linier secara umum adalah

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

Di sini Min dan New_Min adalah 0, yang menyederhanakan rumusnya.

Untuk benar-benar menetapkan warna, Anda tidak perlu mengaturnya melalui konstruksi warna HTML. Anda cukup menggunakan fungsi Color.FromArgb. Cukup ketik di Visual Studio. Untuk beberapa alasan IntelliSense (fitur yang menunjukkan metode apa yang tersedia saat mengetik di IDE) menyembunyikan fungsi tersebut dalam beberapa kasus.

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

Ini tidak berbeda dengan pendekatan HTML Anda, hanya lebih sederhana (nilai #321224 hanyalah representasi dari tiga byte dalam heksadesimal, dalam bentuk #RRGGBB).


Dalam arti sebenarnya, jawaban di atas bukanlah jawaban yang ingin Anda gunakan. Untuk menggunakan pendekatan berbasis persentase, Anda akan membuat nilai RGB sebagai

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)

tapi ini tidak akan memberi Anda rentang warna penuh juga (bahkan 59% dari 255 hanya 150, jadi Anda tidak akan pernah melihat nilai antara 150 dan 255). Interpolasi linier adalah cara yang harus dilakukan.

person Jens    schedule 31.12.2014