我需要一个函数,它可以在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)方法。 –