我想根据 0 到 100 之间的值显示一种颜色。一端 (100) 是纯红色,另一端 (0) 是纯绿色。在中间 (50),我希望它是黄色的。
我希望颜色从一种颜色逐渐淡入另一种颜色,例如在 75 时,颜色一半是红色,一半是黄色,等等。
如何对 RGB 值进行编程以反射(reflect)这种褪色?谢谢。
最佳答案
我有同样的需求,我只是解决了这个问题:
myColor = new Color(2.0f * x, 2.0f * (1 - x), 0);
解释: 让我们关注颜色分量的 [0.0-1.0] 范围,而不是 [0-255] 范围:
- 绿色 = 0.0、1.0、0.0
- 黄色 = 1.0, 1.0, 0.0
- 红色= 1.0, 0.0, 0.0
如果你只是将绿色分量从 0.0(在一端)缩放到 1.0(在另一端)并对红色分量做同样的事情(但向后),你会得到难看和不均匀的颜色分布。
为了让它看起来好看,我们可以写很多代码,或者我们可以更聪明。
如果仔细观察单个分量,您会发现我们可以将范围分成两个相等的部分:在第一个分量中,我们将红色分量从 0.0 增加到 1.0,将绿色保留为 1.0,将蓝色保留为 0.0 ;在第二个中,我们减少绿色分量,让其他 2 个保持原样。我们可以利用这样一个事实,即任何高于 1.0 的值都将被读取为 1.0,通过最大化我们的值来简化代码。假设您的 x 值从 0.00 (0%) 变为 1.00 (100%),您可以将其乘以 2 使其超过颜色分量的 1.0 限制。现在您的组件从 0.0 到 2.0(红色)和从 2.0 到 0.0(绿色)。将它们裁剪到 [0.0-1.0] 范围内即可。
如果你的 x 在另一个范围内移动(比如 [0-100])你需要选择一个合适的因子而不是 2
关于c# - 算法:如何使用 RGB 值通过黄色从红色渐变为绿色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6394304/