i can set uicolor with RGB values:
[UIColor colorWithRed:0.53 green:0.37 blue:0.11 alpha:1.00];
i can set uicolor with hsb values:
[UIColor colorWithHue:0.10 saturation:0.16 brightness:0.13 alpha:1.00];
i also could convert it back to RGB:
CGFloat* colors = CGColorGetComponents(Color1.CGColor);
But how i can get HSB from uicolor?
Use the UIColor
method:
getHue:saturation:brightness:alpha:
From the Apple docs:
"Returns the components that make up the color in the HSB color space."
- (BOOL)getHue:(CGFloat *)hue saturation:(CGFloat *)saturation brightness:(CGFloat *)brightness alpha:(CGFloat *)alpha
Example:
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);
NSLog output:
success: 1 hue: 0.10, saturation: 0.79, brightness: 0.53, alpha: 1.00
Here is a corrected version of the method provided by @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);
NSLog output:
hue: 0.10, saturation: 0.79, value: 0.53