คุณต้องประมาณค่าระหว่าง 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)
แต่สิ่งนี้จะไม่ทำให้คุณได้ช่วงสีที่สมบูรณ์เช่นกัน (แม้แต่ 59% ของ 255 ก็เป็นเพียง 150 ดังนั้นคุณจะไม่เห็นค่าระหว่าง 150 ถึง 255) การประมาณค่าเชิงเส้นเป็นวิธีที่จะไป
person
Jens
schedule
31.12.2014