我正在使用以下代码创建一个颜色对象。
curView.backgroundColor = [[UIColor alloc] initWithHue:229 saturation:40 brightness:75 alpha:1];
我该如何从创建的颜色对象中获取RGB值?
我正在使用以下代码创建一个颜色对象。
curView.backgroundColor = [[UIColor alloc] initWithHue:229 saturation:40 brightness:75 alpha:1];
我该如何从创建的颜色对象中获取RGB值?
在iOS 5中,您可以使用:
CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha =0.0;
[multipliedColor getRed:&red green:&green blue:&blue alpha:&alpha];
NSKeyedArchiver
进行反序列化来解决,就像这样:multipliedColor = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject: multipliedColor]];
- Albert Renshawconst CGFloat *colors = CGColorGetComponents( curView.backgroundColor.CGColor );
这些链接提供了更多的细节:
error: <EXPR>:3:1: error: 'CGColorGetComponents' has been replaced by property 'CGColor.components'
- pkambSWIFT 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
的翻译是: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] }
}
这不是最有效的方法,因此我不会在需要频繁重绘视图的地方使用它。
希望这对您有所帮助。
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);
let ciColor = CIColor(color: backgroundColor)
let alpha = ciColor.alpha
let red = ciColor.red
let blue = ciColor.blue
let green = ciColor.green
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
这是 eppz!kit
的一部分,提供了更多 UIColor 的好东西。
UIColor *color = [[UIColor greenColor] retain]; //line 1
//OR(You will have color variable either like line 1 or line 2)
color = curView.backgroundColor;//line 2
CGColorRef colorRef = [color CGColor];
int _countComponents = CGColorGetNumberOfComponents(colorRef);
if (_countComponents == 4) {
const CGFloat *_components = CGColorGetComponents(colorRef);
CGFloat red = _components[0];
CGFloat green = _components[1];
CGFloat blue = _components[2];
CGFloat alpha = _components[3];
NSLog(@"%f,%f,%f,%f",red,green,blue,alpha);
}
[color release];
const float* colors = CGColorGetComponents( curView.backgroundColor.CGColor );
谢谢。我必须在行的开头添加const
,因为它会产生警告。
@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)
@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)
最高投票的答案已经过时:
错误::3:1:错误:'CGColorGetComponents'已被属性'CGColor.components'替换
相反,使用
myUIColor.cgColor.components
让 r = 颜色![0]
让 g = 颜色![1]
让 b = 颜色![2]
- Gurjinder Singh