如何从UIColor对象获得红绿蓝和阿尔法背?

我得到了从这个方法返回的UIColor:

- (UIColor *)getColor { return [UIColor colorWithRed:redSlider.value green:greenSlider.value blue:blueSlider.value alpha:1.0]; } 

并得到像这样的颜色:

 SelectedColor=[(ColorPickerView *)alertView getColor]; 

现在我想从SelectedColor中获取红色,绿色和蓝色,以便使用这些值。 我想要0和1之间的值。另外,当我使用SelectedColor.CGColor,我的应用程序崩溃。

访问SelectedColor.CGColor时崩溃的原因可能是你不保留getColor的结果,可能你需要的是:

 SelectedColor = [[(ColorPickerView *)alertView getColor] retain]; 

您只能从使用RGB色彩空间的UIColor中获取RGB色彩分量,因为您使用的是colorWithRed:green:blue:alpha:这不是问题,但是如果您的代码改变,则可以不同。

有了这个想法,获取颜色组件是非常简单的:

 const CGFloat* components = CGColorGetComponents(SelectedColor.CGColor); NSLog(@"Red: %f", components[0]); NSLog(@"Green: %f", components[1]); NSLog(@"Blue: %f", components[2]); NSLog(@"Alpha: %f", CGColorGetAlpha(SelectedColor.CGColor)); 

此解决scheme适用于非RGB颜色以及黑色或白色。

 UIColor *color = [UIColor blackColor]; CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha = 0.0; // iOS 5 if ([color respondsToSelector:@selector(getRed:green:blue:alpha:)]) { [color getRed:&red green:&green blue:&blue alpha:&alpha]; } else { // < iOS 5 const CGFloat *components = CGColorGetComponents(color.CGColor); red = components[0]; green = components[1]; blue = components[2]; alpha = components[3]; } // This is a non-RGB color if(CGColorGetNumberOfComponents(color.CGColor) == 2) { CGFloat hue; CGFloat saturation; CGFloat brightness; [color getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha]; } 

在大多数情况下,这将工作,除非转换到RGB不起作用。

 float red, green, blue, alpha; BOOL conversionToRGBWentOk = [color getRed:&red green:&green blue:&blue alpha:&alpha]; 

事实上,这就是这些方法的用途。 如果conversionToRGBWentOkNO你会有一个问题,虽然。

我想你应该看看这里 ,Ars的指南展示了如何扩展UIColor类,支持访问颜色组件。

你只是简单的这样做

 CGFloat red,green,blue,alpha; [UIColorobject getRed:&red green:&green blue:&blue alpha:&alpha]; 

在红色,绿色,蓝色和阿尔法你得到rgb价值,如果你有任何问题,请问…

谢谢

这段代码应该同时适用于RGB和灰度:

 CGFloat *components = (CGFloat *) CGColorGetComponents(<UIColor instance>.CGColor); if(CGColorGetNumberOfComponents(<UIColor instance>.CGColor) == 2) { //assuming it is grayscale - copy the first value components[2] = components[1] = components[0]; } 

如示例所示添加属性ColorLiteral 。 Xcode会提示你一个完整的颜色列表,你可以select。

 self.view.backgroundColor = ColorLiteral 

我认为这将是一个方法。 如果您还需要使用alpha参数,则可以像inputRG和B一样从input中插入alpha。

 - (UIColor *)getColorBetweenColor:(UIColor *)color1 andColor:(UIColor *)color2 percentage:(CGFloat)percent { CGFloat red1, green1, blue1, alpha1; CGFloat red2, green2, blue2, alpha2; [color1 getRed:&red1 green:&green1 blue:&blue1 alpha:&alpha1]; [color2 getRed:&red2 green:&green2 blue:&blue2 alpha:&alpha2]; double resultRed = red1 + percent * (red2 - red1); double resultGreen = green1 + percent * (green2 - green1); double resultBlue = blue1 + percent * (blue2 - blue1); return [UIColor colorWithRed:resultRed green:resultGreen blue:resultBlue alpha:1]; }