我可以用RGB值设置uicolor:
[UIColor colorWithRed:0.53 green:0.37 blue:0.11 alpha:1.00];
Run Code Online (Sandbox Code Playgroud)
我可以用hsb值设置uicolor:
[UIColor colorWithHue:0.10 saturation:0.16 brightness:0.13 alpha:1.00];
Run Code Online (Sandbox Code Playgroud)
我也可以将它转换回RGB:
CGFloat* colors = CGColorGetComponents(Color1.CGColor);
Run Code Online (Sandbox Code Playgroud)
但我如何从uicolor获得HSB?
zap*_*aph 43
使用UIColor方法:
getHue:saturation:brightness:alpha:
来自Apple文档:
"返回构成HSB颜色空间中颜色的组件."
- (BOOL)getHue:(CGFloat *)hue saturation:(CGFloat *)saturation brightness:(CGFloat *)brightness alpha:(CGFloat *)alpha
Run Code Online (Sandbox Code Playgroud)
例:
UIColor *testColor = [UIColor colorWithRed:0.53 green:0.37 blue:0.11 alpha:1.00];
CGFloat hue;
CGFloat saturation;
CGFloat brightness;
CGFloat alpha;
BOOL success = [testColor getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha];
NSLog(@"success: %i hue: %0.2f, saturation: %0.2f, brightness: %0.2f, alpha: %0.2f", success, hue, saturation, brightness, alpha);
Run Code Online (Sandbox Code Playgroud)
NSLog输出:
成功:1色调:0.10,饱和度:0.79,亮度:0.53,alpha:1.00
以下是@WhiteTiger提供的方法的更正版本:
// Test values
CGFloat red = 0.53;
CGFloat green = 0.37;
CGFloat blue = 0.11;
CGFloat hue = 0;
CGFloat saturation = 0;
CGFloat brightness = 0;
CGFloat minRGB = MIN(red, MIN(green,blue));
CGFloat maxRGB = MAX(red, MAX(green,blue));
if (minRGB==maxRGB) {
hue = 0;
saturation = 0;
brightness = minRGB;
} else {
CGFloat d = (red==minRGB) ? green-blue : ((blue==minRGB) ? red-green : blue-red);
CGFloat h = (red==minRGB) ? 3 : ((blue==minRGB) ? 1 : 5);
hue = (h - d/(maxRGB - minRGB)) / 6.0;
saturation = (maxRGB - minRGB)/maxRGB;
brightness = maxRGB;
}
NSLog(@"hue: %0.2f, saturation: %0.2f, value: %0.2f", hue, saturation, brightness);
Run Code Online (Sandbox Code Playgroud)
NSLog输出:
色调:0.10,饱和度:0.79,值:0.53
apo*_*che 25
这是使用Swift功能(扩展,计算属性和元组)在几行代码中执行相同操作的好方法.
extension UIColor {
var hsba: (h: CGFloat, s: CGFloat, b: CGFloat, a: CGFloat) {
var hsba: (h: CGFloat, s: CGFloat, b: CGFloat, a: CGFloat) = (0, 0, 0, 0)
self.getHue(&(hsba.h), saturation: &(hsba.s), brightness: &(hsba.b), alpha: &(hsba.a))
return hsba
}
}
Run Code Online (Sandbox Code Playgroud)
Swift 3.2/4次要更新
Swift 3.2/4强制执行使用前一代码触发的新警告,因为您hsba在同一次调用中多次修改变量getHue
同时访问参数'hsba',但修改需要独占访问; 考虑复制到局部变量.
extension UIColor {
var hsba:(h: CGFloat, s: CGFloat,b: CGFloat,a: CGFloat) {
var h: CGFloat = 0, s: CGFloat = 0, b: CGFloat = 0, a: CGFloat = 0
self.getHue(&h, saturation: &s, brightness: &b, alpha: &a)
return (h: h, s: s, b: b, a: a)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20535 次 |
| 最近记录: |