您可以简单地创建一个 HSL 颜色空间初始值设定项。
注意:该//From HSL TO HSB ---------部分内的公式取自https://en.wikipedia.org/wiki/HSL_and_HSV#HSL_to_HSV
实施如下:
和UIColor
import UIKit
extension UIColor {
convenience init(hue: CGFloat, saturation: CGFloat, lightness: CGFloat, alpha: CGFloat) {
precondition(0...1 ~= hue &&
0...1 ~= saturation &&
0...1 ~= lightness &&
0...1 ~= alpha, "input range is out of range 0...1")
//From HSL TO HSB ---------
var newSaturation: CGFloat = 0.0
let brightness = lightness + saturation * min(lightness, 1-lightness)
if brightness == 0 { newSaturation = 0.0 }
else {
newSaturation = 2 * (1 - lightness / brightness)
}
//---------
self.init(hue: hue, saturation: newSaturation, brightness: brightness, alpha: alpha)
}
}
Run Code Online (Sandbox Code Playgroud)
和Color
import SwiftUI
extension Color {
init(hue: Double, saturation: Double, lightness: Double, opacity: Double) {
precondition(0...1 ~= hue &&
0...1 ~= saturation &&
0...1 ~= lightness &&
0...1 ~= opacity, "input range is out of range 0...1")
//From HSL TO HSB ---------
var newSaturation: Double = 0.0
let brightness = lightness + saturation * min(lightness, 1-lightness)
if brightness == 0 { newSaturation = 0.0 }
else {
newSaturation = 2 * (1 - lightness / brightness)
}
//---------
self.init(hue: hue, saturation: newSaturation, brightness: brightness, opacity: opacity)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3667 次 |
| 最近记录: |