TL;DR :
Swift :
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)
}
}
Utilisation :
let lightColor = somethingDark.lighterColor
Objective-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 RGB donnent des résultats complètement différents. RGB ajoute simplement (ou rend la couleur plus proche) du blanc, et la solution HSB rapproche la couleur du bord de l'échelle de Brigtness - qui commence fondamentalement avec le noir et se termine avec la couleur pure...
En fait, la luminosité (valeur) rend la couleur plus ou moins proche du noir, tandis que la saturation la rend plus ou moins proche du blanc...
Comme vu ici :
Ainsi, la solution pour rendre une couleur réellement plus claire (c'est-à-dire plus proche du blanc...) sera de rendre sa valeur de Saturation plus petit ce qui donne 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;
}
1 votes
Le terme "gradient" implique qu'une partie de votre image sera une nuance de la couleur tandis qu'une autre partie sera une nuance plus sombre ou plus claire. Est-ce une autre façon de définir ce que vous voulez faire ?
2 votes
Jetez un coup d'œil à cette bibliothèque github.com/yannickl/DynamicColor
0 votes
Swift utilisant la teinte, la saturation et la luminosité stackoverflow.com/a/30012117/2303865