如何“旋转”颜色的色调?

问题描述 投票:0回答:2

我想生成与给定

UIColor
(三色、类似色、补色等)相匹配的颜色。

我读过很多帖子,例如thisthisthis。在上一篇文章中,回答者建议访问 easyrgb.com。 所以我去了那里。我了解到,如果我想生成这些配色方案,我需要将色调“旋转”一定程度。例如,对于三元色,我需要将其旋转±120度。

我知道我可以通过调用

getHue(:saturation:brightness:)
来获取颜色的色调,但是我如何“旋转”它呢?该方法返回的色调不是一个数字吗? 0 到 1 之间的数字?这对我来说毫无意义!

我认为第一篇文章可能有答案,但代码是用 python 编写的。我只学了一点Python,所以我不太明白这意味着什么:

h = [(h+d) % 1 for d in (-d, d)]           # Rotation by d

从评论中,我看到这条线以某种方式将色调旋转了 d 度。但我不知道该语法意味着什么。

谁能告诉我如何旋转色调,或者将上面的代码翻译成swift?

ios swift colors uicolor
2个回答
6
投票

色调分量的范围从 0.0 到 1.0,对应于色轮中从 0° 到 360° 的角度(比较 维基百科:HSL 和 HSV)。

要将色调分量“旋转”

n
度,请使用:

let n = 120 // 120 degrees as an example
hue = fmod(hue + CGFloat(n)/360.0, 1.0)

fmod()
函数用于标准化结果 添加范围 0.0 到 1.0。

补色的色调是

let hueComplement = fmod(hue + 0.5, 1.0)

1
投票

此处记录,如果您使用 SwiftUI 进行构建,则可以利用“hueRotation”视图修饰符。

来自文档:

使用色调旋转效果根据您指定的角度移动视图中的所有颜色。 下面的示例显示了一系列填充了线性渐变的正方形。每个方块显示 36° 色调旋转(5 个方块总共 180°)对渐变的影响:

struct HueRotation: View {
    var body: some View {
        HStack {
            ForEach(0..<6) {
                Rectangle()
                    .fill(.linearGradient(
                        colors: [.blue, .red, .green],
                        startPoint: .top, endPoint: .bottom))
                    .hueRotation((.degrees(Double($0 * 36))))
                    .frame(width: 60, height: 60, alignment: .center)
            }
        }
    }
}

产生这样的视觉结果:

Six rectangles with various gradients

© www.soinside.com 2019 - 2024. All rights reserved.