不同之处:UIColor和CGColor之间的转换

7

以下是我试图从UIColor转换为CGColor的颜色:

001385 - 红:0 绿:19 蓝:133

ca000b - 红:202 绿:0 蓝:11

这是蓝色与iOS渲染的对比: a:enter image description here b:enter image description here

这是红色与iOS渲染的对比:a<code>enter image description here</code> b:enter image description here

这是我用来转换颜色的代码: 红色:

[[UIColor colorWithRed:202 green:0 blue:11 alpha:1] CGColor]

蓝色:

[[UIColor colorWithRed:0 green:19 blue:133 alpha:1] CGColor]

有人知道我做错了什么吗?


6
阅读UIColor colorWithRed:green:blue:alpha:的文档。 - rmaddy
3个回答

25
您需要将参数除以255.0。正如@Duncan C所指出的那样,请确保您正在除以255.0。
[[UIColor colorWithRed:202.0/255.0 green:0 blue:11/255.0 alpha:1] CGColor]


[[UIColor colorWithRed:0 green:19/255.0 blue:133/255.0 alpha:1] CGColor]

好的,我想参数应该只能从0到1。谢谢回复。 - Jake Chasan
确保除以255.0。这将强制执行浮点数运算,并返回十进制值。如果你除以255,它可能会执行整数运算,并在小于255/255的情况下给出零。 - Duncan C

3

一个方便的分类可添加到UIColor中:

然后,您可以执行以下操作:[UIColor R:0 G:19 B:133]

@interface UIColor (RGB)

+(UIColor*)R:(NSUInteger)r G:(NSUInteger)g B:(NSUInteger)b;
+(UIColor*)R:(NSUInteger)r G:(NSUInteger)g B:(NSUInteger)b A:(CGFloat)a;

@end

@implementation UIColor (RGB)

+(UIColor*)R:(NSUInteger)r G:(NSUInteger)g B:(NSUInteger)b {
     return [self R:r G:g B:b A:1.0];
}

+(UIColor*)R:(NSUInteger)r G:(NSUInteger)g B:(NSUInteger)b A:(CGFloat)a {
    return [UIColor colorWithRed:((CGFloat)r)/255.0 green:((CGFloat)g)/255.0 blue:((CGFloat)b)/255.0 alpha:a];
}

@end

0

自iOS 5以来,您可以使用UIColor的getRed(_:green:blue:alpha)方法(此处显示为Swift):

var red: CGFloat = 0
var green: CGFloat = 0
var blue: CGFloat = 0
var alpha: CGFloat = 0

let color = UIColor.systemGreen
// getRed(_:green:blue:alpha) returns 'true' on successful conversion
if color.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
{
    print("red: \(red)\ngreen: \(green)\nblue: \(blue)\nalpha: \(alpha)")
}

/*
which for `systemGreen` in light mode prints:
red: 0.20392156862745098
green: 0.7803921568627451
blue: 0.34901960784313724
alpha: 1.0
*/

并且,作为一个计算属性,在扩展UIColor中:

extension UIColor {
    var rgbaComponents: (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) {
        var red: CGFloat = 0
        var green: CGFloat = 0
        var blue: CGFloat = 0
        var alpha: CGFloat = 0

        getRed(&red, green: &green, blue: &blue, alpha: &alpha)

        return (red, green, blue, alpha)
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接