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)
}
}
Kullanım:
let lightColor = somethingDark.lighterColor
Amaç-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, @ user529758'e yaptığı yorumda haklıydı (Kabul edilen cevap) - HSB (Veya HSV) ve RGB çözümleri tamamen farklı sonuçlar veriyor. RGB sadece beyaz ekler (veya rengi yakınlaştırır) ve HSB çözümü rengi Brigtness ölçeğinde kenara yaklaştırır - temelde siyahla başlar ve saf renkle biter ...
Temelde Parlaklık (Değer) rengi siyaha daha az veya daha çok yaklaştırır, Doygunluk onu beyaza daha az veya daha çok yaklaştırır ...
Burada görüldüğü gibi:
Dolayısıyla, bir rengi gerçekten daha parlak hale getirmenin (yani beyaza daha yakın ...) çözümü, Doygunluk değerini küçültmek ve bu çözümle sonuçlanmak olacaktır:
- (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
alpha:a];
}
return nil;
}