我需要一個函數,它可以在vb.net中從紅色(值爲0)到綠色(值爲100)返回一種顏色。此外,我需要一種方法來發現字體的顏色應該是白色還是黑色,具體取決於背景顏色。從綠色到紅色取決於值
-4
A
回答
2
線性插值
我曾經有過同樣需要做到色彩linearly interpolation
兩者之間的WinForm的。我會做一個例外,並分享背後的代碼,因爲我認爲它不僅可以用於OP,還可以用於其他用途。
該函數接受範圍0.0
(0%)一個Single
值到1.0
(100%)。
Public Shared Function Lerp(ByVal color1 As Color, ByVal color2 As Color, ByVal amount As Single) As Color
Const bitmask As Single = 65536.0!
Dim n As UInteger = CUInt(Math.Round(CDbl(Math.Max(Math.Min((amount * bitmask), bitmask), 0.0!))))
Dim r As Integer = (CInt(color1.R) + (((CInt(color2.R) - CInt(color1.R)) * CInt(n)) >> 16))
Dim g As Integer = (CInt(color1.G) + (((CInt(color2.G) - CInt(color1.G)) * CInt(n)) >> 16))
Dim b As Integer = (CInt(color1.B) + (((CInt(color2.B) - CInt(color1.B)) * CInt(n)) >> 16))
Dim a As Integer = (CInt(color1.A) + (((CInt(color2.A) - CInt(color1.A)) * CInt(n)) >> 16))
Return Color.FromArgb(a, r, g, b)
End Function
所以你的情況就會是這樣的:
Dim value As Integer = 'A value in the range 0 - 100
Dim newColor As Color = Lerp(Color.Red, Color.Green, If((value > 0I), (Math.Min(Math.Max(CSng(value), 0.0!), 100.0!)/100.0!), 0.0!))
光度
關於部分「白色或黑色,取決於背景」你需要知道的顏色的亮度。以下函數返回0表示黑色,240表示白色。因此,如果給定背景色的光度爲<= 120
,則應使用白色前景色。
Public Shared Function GetLuminosity(c As Color) As Integer
Return CInt((((Math.Max(Math.Max(CInt(c.R), CInt(c.G)), CInt(c.B)) + Math.Min(Math.Min(CInt(c.R), CInt(c.G)), CInt(c.B))) * 240) + 255)/510I)
End Function
+0
另一種比這個更糟的方法是使用'Drawing2D.LinearGradientBrush',將其轉換爲位圖並使用方法'GetPixel'。知道這個功能,這是一個荒謬的使用這種方式... – Nizam
相關問題
- 1. Css反饋標籤紅色或綠色取決於結果
- 2. 不錯,從紅色到綠色?
- 3. 值紅色/黃色/綠色(如何?)
- 4. 計算從綠色到紅色的顏色值
- 5. 如何從java中的灰度值獲取紅色,綠色和藍色值?
- 6. 顏色從綠色到紅色與百分比
- 7. 如何從rgb/rgba字符串獲取紅色的綠色和藍色值?
- 8. HTML顏色代碼:紅色到黃色到綠色
- 9. 處理js紅色()綠色()藍色()
- 10. 代表顏色的百分比值(0-100)(從紅色到綠色)
- 11. PHP - 從綠色 - >黑色 - >紅色生成顏色
- 12. 從Android顏色對象獲取紅色,藍色或綠色通道
- 13. 使用Color.brighter方法打印紅色,綠色和藍色值
- 14. rgba字符串分開的紅色綠色藍色和alpha值
- 15. Java BufferedImage單獨獲取紅色,綠色和藍色
- 16. 使顏色更紅,綠等最佳值?
- 17. 什麼是紅色/綠色測試?
- 18. 地塊所有紅色和綠色
- 19. .Net Reflector紅色和綠色方塊
- 20. 將綠色轉換爲紅色
- 21. 漂浮在一個矩陣顏色紅色到綠色
- 22. 用於樹形圖的紅色琥珀色綠色順序調色板R
- 23. as3增加顏色的(紅色,綠色,藍色)
- 24. 用於C++的顏色地圖庫,可將給定值轉換爲紅色,綠色和藍色值
- 25. 紅色到綠色進度條使用GTK3和Python
- 26. 如何將紅色添加到綠色並變黑?
- 27. osx應用程序紅色橙色綠色圖標
- 28. 以紅色,綠色或藍色水平繪製的圖形
- 29. Java - 紅色,綠色,藍色可獲得RED
- 30. 使用C排序紅色,綠色藍色使用C
你知道演習,告訴我們你到目前爲止做了什麼。這不是一個代碼工廠。說到這裏,你要找的東西就像'XNA' [Color.Lerp](http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.color。 lerp(v = xnagamestudio.31).aspx)方法。 –