c# - 算法:如何使用 RGB 值通过黄色从红色渐变为绿色?

标签 c# algorithm rgb

我想根据 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/

相关文章:

c# - 如何在没有硬代码字符串的情况下打印函数名称?

javascript - 如何从加权图中的顶点找到长度为 k 的最短路径?

c - lcms2 通过 C 中的配置文件将 CMYK 转换为 RGB - 关于输入/输出值的帮助

c# - 公共(public) API 如何管理负载?

c# - 如何在 Windows Mobile 中调试 .net 应用程序

c# - 用 MySQL 数据填充 Datagridview

algorithm - 包含电话号码的庞大数据集的散列和加密技术

c++ - 在示例问题中合并操作?

c++ - FFMPEG:在 h264rgb/libx264rgb 错误中解码视频

css - 如何将自定义颜色应用于 PdfPCell 的背景?