TL; DR:
สวิฟท์:
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)
}
}
การใช้งาน:
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 ถูกต้องในความคิดเห็นของเขาที่ @ user529758 (คำตอบที่ได้รับการยอมรับ) - โซลูชั่น HSB (หรือ HSV) และ RGB ให้ผลลัพธ์ที่แตกต่างอย่างสิ้นเชิง RGB เพิ่งเพิ่ม (หรือทำให้สีใกล้เคียงขึ้น) สีขาวและโซลูชัน HSB จะทำให้สีใกล้กับขอบมากขึ้นในระดับ Brigtness - ซึ่งโดยทั่วไปเริ่มจากสีดำและลงท้ายด้วยสีบริสุทธิ์ ...
ความสว่างโดยทั่วไป (ค่า) ทำให้สีมีความเข้มน้อยลงหรือใกล้เคียงกับสีดำมากขึ้นโดยที่ความอิ่มตัวของสีจะทำให้สีขาวใกล้เคียงยิ่งขึ้น ...
เท่าที่เห็นที่นี่:
ดังนั้นวิธีแก้ปัญหาที่ทำให้สีสว่างขึ้น (เช่นใกล้เคียงกับสีขาวมากขึ้น ... ) จะทำให้ค่าความอิ่มตัวของสีนั้นเล็กลงซึ่งจะทำให้วิธีนี้:
- (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;
}