通过所有 RGB 颜色渐变

Posted

技术标签:

【中文标题】通过所有 RGB 颜色渐变【英文标题】:Gradient through all RGB colors 【发布时间】:2015-03-12 08:05:25 【问题描述】:

我正在尝试通过所有 rgb 颜色组合及其补色创建流畅的颜色过渡,到目前为止我的尝试是:

var count = x   // this is the index of the current color

var red   = CGFloat((count >> 16) & 0xFF)/255.0;
var green = CGFloat((count >> 8) & 0xFF)/255.0;
var blue  = CGFloat((count) & 0xFF)/255.0;

var color = UIColor(red: red, green: green, blue: blue, alpha: 1.0)
var complement = UIColor(red: 1.0-red, green: 1.0-green, blue: 1.0-blue, alpha: 1.0)

这种方法的问题是,在每 255 种颜色之后,会出现一个“几乎”全黑屏幕的中断,因为下一个红色索引从 0 开始递增。

我的愿望是在没有任何“跳跃”的情况下通过所有颜色。这甚至可能吗? (颜色的顺序并不重要——也就是说,我们从红色或蓝色或绿色、黑色或白色开始并不重要。)

【问题讨论】:

【参考方案1】:

也许不是您要的答案,因为它不是基于 RGB 值的 - 但如果您想检查所有颜色,为什么不使用 HSB?

红色:

UIColor(hue: 0.0, saturation: 1.0, brightness: 1.0, alpha: 1.0)

青色:

UIColor(hue: 0.5, saturation: 1.0, brightness: 1.0, alpha: 1.0)

又红了:

UIColor(hue: 1.0, saturation: 1.0, brightness: 1.0, alpha: 1.0)

更新: 这是一个示例,如何获取给定色调值的补色。

var hueValue: CGFloat = 0.75 // change this value (min 0.0, max 1.0)
var complementaryHueValue: CGFloat = (hueValue + 0.5) % 1.0 // you could also write (1.0 - hueValue)

UIColor(hue: hueValue, saturation: 1.0, brightness: 1.0, alpha: 1.0)
UIColor(hue: complementaryHueValue, saturation: 1.0, brightness: 1.0, alpha: 1.0)

【讨论】:

我会试试看的!所以你会迭代所有的色调? 如何获得互补色? 如果我使用 `hue: 1.0/index' 我会跳过很多正确的 - 从 1 到 2 我会跳过 0.0 到 0.5 之间的所有颜色 正好从 0.0(红色,最小值)迭代到 1.0(红色,最大值)。所有颜色都介于两者之间。补色与您的色相值相差 0.5。这里有一个小代码 sn-p 可以提供帮助:var hueValue = 0.75var complementaryHueValue = ((hueValue + 0.5) % 1.0) 无论你的 hueValue 是什么,使用 (.. + 0.5) % 1.0,你总是会得到补色。

以上是关于通过所有 RGB 颜色渐变的主要内容,如果未能解决你的问题,请参考以下文章

SVG颜色渐变和填充

颜色渐变的RGB计算

将 `shap.summary_plot()` 的渐变颜色更改为特定的 2 或 3 RGB 渐变调色板颜色

在 PHP 中生成 RGB 渐变颜色的算法

RGB颜色渐变函数

js rgb颜色阶梯渐变效果实现