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