TL; DR:
Rapide:
extension UIColor {
var lighterColor: UIColor {
return lighterColor(removeSaturation: 0.5, resultAlpha: -1)
}
func lighterColor(removeSaturation val: CGFloat, resultAlpha alpha: CGFloat) -> UIColor {
var h: CGFloat = 0, s: CGFloat = 0
var b: CGFloat = 0, a: CGFloat = 0
guard getHue(&h, saturation: &s, brightness: &b, alpha: &a)
else {return self}
return UIColor(hue: h,
saturation: max(s - val, 0.0),
brightness: b,
alpha: alpha == -1 ? a : alpha)
}
}
Usage:
let lightColor = somethingDark.lighterColor
Objectif c:
- (UIColor *)lighterColorRemoveSaturation:(CGFloat)removeS
resultAlpha:(CGFloat)alpha {
CGFloat h,s,b,a;
if ([self getHue:&h saturation:&s brightness:&b alpha:&a]) {
return [UIColor colorWithHue:h
saturation:MAX(s - removeS, 0.0)
brightness:b
alpha:alpha == -1? a:alpha];
}
return nil;
}
- (UIColor *)lighterColor {
return [self lighterColorRemoveSaturation:0.5
resultAlpha:-1];
}
@rchampourlier avait raison dans son commentaire à @ user529758 (La réponse acceptée) - Les solutions HSB (ou HSV) et RVB donnent des résultats complètement différents. RVB ajoute simplement (ou rapproche la couleur du) blanc, et la solution HSB rapproche la couleur du bord de l'échelle de Brigtness - qui commence essentiellement par le noir et se termine par la couleur pure ...
Fondamentalement, la luminosité (valeur) rend la couleur plus ou moins proche du noir, où la saturation la rend moins ou plus proche du blanc ...
Comme vu ici:
Donc , la solution pour rendre une couleur plus claire en fait ( par exemple plus proche de blanc ...) sera de rendre sa valeur de saturation plus petite , ce qui cette solution:
- (UIColor *)lighterColor {
CGFloat h,s,b,a;
if ([self getHue:&h saturation:&s brightness:&b alpha:&a]) {
return [UIColor colorWithHue:h
saturation:MAX(s - 0.3, 0.0)
brightness:b /*MIN(b * 1.3, 1.0)*/
alpha:a];
}
return nil;
}