Ios 如何从UIColor获取RGB值?
我正在使用以下代码创建一个颜色对象Ios 如何从UIColor获取RGB值?,ios,rgb,uicolor,Ios,Rgb,Uicolor,我正在使用以下代码创建一个颜色对象 curView.backgroundColor = [[UIColor alloc] initWithHue:229 saturation:40 brightness:75 alpha:1]; 如何从创建的颜色对象检索RGB值 const CGFloat *colors = CGColorGetComponents( curView.backgroundColor.CGColor ); 这些链接提供了更多详细信息: 谢谢。我不得不在行的开头添加co
curView.backgroundColor = [[UIColor alloc] initWithHue:229 saturation:40 brightness:75 alpha:1];
如何从创建的颜色对象检索RGB值
const CGFloat *colors = CGColorGetComponents( curView.backgroundColor.CGColor );
这些链接提供了更多详细信息:
谢谢。我不得不在行的开头添加
const
,因为它正在生成警告 在iOS 5中,您可以使用:
CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha =0.0;
[multipliedColor getRed:&red green:&green blue:&blue alpha:&alpha];
刚刚为这个做了一个分类
NSLog(@"%f", [UIColor blueColor].blue); // 1.000000
有点像:
typedef enum { R, G, B, A } UIColorComponentIndices;
@implementation UIColor (EPPZKit)
-(CGFloat)red
{ return CGColorGetComponents(self.CGColor)[R]; }
-(CGFloat)green
{ return CGColorGetComponents(self.CGColor)[G]; }
-(CGFloat)blue
{ return CGColorGetComponents(self.CGColor)[B]; }
-(CGFloat)alpha
{ return CGColorGetComponents(self.CGColor)[A]; }
@end
希望这会有所帮助
CGFloat red, green, blue, alpha;
//Create a sample color
UIColor *redColor = [UIColor redColor];
//Call
[redColor getRed: &red
green: &green
blue: &blue
alpha: &alpha];
NSLog(@"red = %f. Green = %f. Blue = %f. Alpha = %f",
red,
green,
blue,
alpha);
我想获得
UITableViewStyle
“UITableViewStyleGrouped”的背景色,因此在viewdide:
方法中,我添加了以下代码:
NSLog(@“%@”,self.tableView.backgroundView.backgroundColor)代码>
它做了我预期的事情并返回了日志:
UIDeviceGBColorSpace 0.937255 0.937255 0.956863 1
简而言之,只需输入NSLog(@“%@,[UIColor whateverColor])代码>SWIFT 3&4
我发现cgColor.components并不总是返回4个颜色值,所以我对其进行了更改,以便它从CIColor包装器中获取它们
extension UIColor {
var redValue: CGFloat{ return CIColor(color: self).red }
var greenValue: CGFloat{ return CIColor(color: self).green }
var blueValue: CGFloat{ return CIColor(color: self).blue }
var alphaValue: CGFloat{ return CIColor(color: self).alpha }
}
SWIFT 2
extension UIColor {
var red: CGFloat{ return CGColorGetComponents(self.CGColor)[0] }
var green: CGFloat{ return CGColorGetComponents(self.CGColor)[1] }
var blue: CGFloat{ return CGColorGetComponents(self.CGColor)[2] }
var alpha: CGFloat{ return CGColorGetComponents(self.CGColor)[3] }
}
这不是最有效的方法,所以我不会使用它来不断地重新绘制视图。由于iOS 2.0,在UIColor
上有一个名为styleString
的私有实例方法,它返回颜色的RGB或RGBA字符串表示,即使对于RGB空间以外的颜色,如whiteColor
目标C:
@interface UIColor (Private)
- (NSString *)styleString;
@end
// ...
[[UIColor whiteColor] styleString]; // rgb(255,255,255)
[[UIColor redColor] styleString]; // rgb(255,0,0)
[[UIColor lightTextColor] styleString]; // rgba(255,255,255,0.600000)
在Swift中,您可以使用桥接头来公开接口。使用纯Swift,您需要使用专用方法创建@objc
协议,并使用协议创建unsafeBitCast
UIColor
:
@objc protocol UIColorPrivate {
func styleString() -> String
}
let white = UIColor.whiteColor()
let red = UIColor.redColor()
let lightTextColor = UIColor.lightTextColor()
let whitePrivate = unsafeBitCast(white, UIColorPrivate.self)
let redPrivate = unsafeBitCast(red, UIColorPrivate.self)
let lightTextColorPrivate = unsafeBitCast(lightTextColor, UIColorPrivate.self)
whitePrivate.styleString() // rgb(255,255,255)
redPrivate.styleString() // rgb(255,0,0)
lightTextColorPrivate.styleString() // rgba(255,255,255,0.600000)
使用使这一过程变得非常简单:
import HandyUIKit
let color = UIColor(red: 0.1, green: 0.2, blue: 0.3, alpha: 0.4)
// get any of the rgba values
color.rgba.red // => 0.1
color.rgba.green // => 0.2
color.rgba.blue // => 0.3
color.rgba.alpha // => 0.4
let color = UIColor(hue: 0.1, saturation: 0.2, brightness: 0.3, alpha: 0.4)
// you can get any of the hsba values, too
color.hsba.hue // => 0.1
color.hsba.saturation // => 0.2
color.hsba.brightness // => 0.3
color.hsba.alpha // => 0.4
还有一个类似的选项,用于获取hsba的值:
import HandyUIKit
let color = UIColor(red: 0.1, green: 0.2, blue: 0.3, alpha: 0.4)
// get any of the rgba values
color.rgba.red // => 0.1
color.rgba.green // => 0.2
color.rgba.blue // => 0.3
color.rgba.alpha // => 0.4
let color = UIColor(hue: 0.1, saturation: 0.2, brightness: 0.3, alpha: 0.4)
// you can get any of the hsba values, too
color.hsba.hue // => 0.1
color.hsba.saturation // => 0.2
color.hsba.brightness // => 0.3
color.hsba.alpha // => 0.4
只需使用迦太基安装即可
我希望有帮助 Swift 3版David Rees回答:
extension UIColor {
var redValue: CGFloat{
return cgColor.components! [0]
}
var greenValue: CGFloat{
return cgColor.components! [1]
}
var blueValue: CGFloat{
return cgColor.components! [2]
}
var alphaValue: CGFloat{
return cgColor.components! [3]
}
}
像这样设置你的颜色
UIColor.FromRGB(128, 179, 255)
这是给Xamarin ios的。。。但可以肯定的是,在swift中有这样一种方法 我为这个和其他颜色控件制作了一些有用的宏:
在你的情况下,你只需要
getRGBA(myColor, red, green, blue, alpha);
NSLog(@"Red Value: %f", red);
NSLog(@"Blue Value: %f", green);
NSLog(@"Green Value: %f", blue);
宏:
得票最多的答案已经过时:
错误::3:1:错误:“CGColorGetComponents”已被属性“CGColor.components”替换
相反,使用
myUIColor.cgColor.components
您可以使用CIColor组件
(swift 5)
let ciColor=ciColor(颜色:backgroundColor)
设alpha=ciColor.alpha
让红色=ciColor.red
让蓝色=环蓝色
让绿色=圆形
这也适用于非RGB颜色空间下面的答案应该是评论。注意:这只适用于RGB空间中的颜色。例如,这在[UIColor whiteColor]上不起作用,因为它不在RGB中。我在这个问题中发布了一些示例代码,以使其在非RGB上下文中起作用:如果有人发现如何从颜色中获取值有问题,您可以编写类似于,CGFloat red=colors[0]代码>错误::3:1:错误:“CGColorGetComponents”已被属性“CGColor.components”替换。
可能只是注释的重复,传递到方法-initWithHue:saturation:brightness:alpha:的参数都应介于0.0和1.0之间。这仅在iOS 5.0或更高版本中受支持。请注意,只有当起始颜色位于“兼容颜色空间”(根据设备/操作系统的不同而有所不同)中时,此方法才会成功。例如,我刚刚发现在运行iOS 7的iPad2上调用[UIColor darkGrayColor]会失败。但是,在运行iOS 8的iPad Air上,同样的颜色可以很好地工作。@devios1这可能可以通过先序列化颜色,然后使用NSKeyedArchiver
反序列化来解决,如下所示:multipledcolor=[NSKeyedArchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:multipledcolor]]代码>它没有为尝试隐式将CGFloat强制转换为float生成警告吗?:)让color=myUIColor.cgColor.components让r=color![0]设g=color![1] 让b=颜色![2]
#define rgba(r,g,b,a) [UIColor colorWithRed:((float)(r))/255.0f green:((float)(g))/255.0f blue:((float)(b))/255.0f alpha:a]
#define rgb(r,g,b) rgba(r, g, b, 1.0f)
#define rgbaf(r,g,b,a) [UIColor colorWithRed:(r) green:(g) blue:(b) alpha:a]
#define rgbf(r,g,b) rgbaf(r, g, b, 1.0f)
#define rgba_fromColor(__color, __r, __g, __b, __a) \
CGFloat __r, __g, __b, __a;\
UIColor *__unpackedColor = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:__color]];/*Bring system colors into compatible color-space (e.g. DarkGrayColor)*/\
[__unpackedColor getRed:&__r green:&__g blue:&__b alpha:&__a];
#define getRGBA(__color, __r, __g, __b, __a) hsba_fromColor(__color, __r, __g, __b, __a)
#define getRed(__color) (\
(^float (void){\
rgba_fromColor(__color, r, g, b, a);\
return r;\
})()\
)
#define getGreen(__color) (\
(^float (void){\
rgba_fromColor(__color, r, g, b, a);\
return g;\
})()\
)
#define getBlue(__color) (\
(^float (void){\
rgba_fromColor(__color, r, g, b, a);\
return b;\
})()\
)
#define getAlpha(__color) (\
(^float (void){\
rgba_fromColor(__color, r, g, b, a);\
return a;\
})()\
)
#define hsba(h,s,b,a) [UIColor colorWithHue:((float)(h))/360.0f saturation:((float)(s))/100.0f brightness:((float)(b))/100.0f alpha:a]
#define hsb(h,s,b) hsba(h, s, b, 1.0f)
#define hsbaf(h,s,b,a) [UIColor colorWithHue:(h) saturation:(s) brightness:(b) alpha:a]
#define hsbf(h,s,b) rgbaf(h, s, b, 1.0f)
#define hsba_fromColor(__color, __h, __s, __b, __a) \
CGFloat __h, __s, __b, __a;\
UIColor *__unpackedColor = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:__color]];/*Bring system colors into compatible color-space (e.g. DarkGrayColor)*/\
[__unpackedColor getHue:&__h saturation:&__s brightness:&__b alpha:&__a];
#define getHSBA(__color, __h, __s, __b, __a) rgba_fromColor(__color, __h, __s, __b, __a)
#define getHue(__color) (\
(^float (void){\
hsba_fromColor(__color, h, s, b, a);\
return h;\
})()\
)
#define getSaturation(__color) (\
(^float (void){\
hsba_fromColor(__color, h, s, b, a);\
return s;\
})()\
)
#define getBrightness(__color) (\
(^float (void){\
hsba_fromColor(__color, h, s, b, a);\
return b;\
})()\
)
/*
///already defined in RGBA macros
#define getAlpha(__color) (\
(^float (void){\
hsba_fromColor(__color, h, s, b, a);\
return a;\
})()\
)
*/