如何从 RGBA 创建 UIColor?

Posted

技术标签:

【中文标题】如何从 RGBA 创建 UIColor?【英文标题】:How do I create a UIColor from RGBA? 【发布时间】:2012-11-04 23:48:53 【问题描述】:

我想在我的项目中使用NSAttributedString,但是当我尝试设置颜色时,它不是标准集(redColorblackColorgreenColor 等)UILabel以白色显示这些字母。 这是我的这段代码。

[attributedString addAttribute:NSForegroundColorAttributeName
                         value:[UIColor colorWithRed:66
                                               green:79
                                                blue:91
                                               alpha:1]
                         range:NSMakeRange(0, attributedString.length)];

我尝试使用 Core Image 框架中的 CIColor 进行着色,但结果相同。 我应该对我的代码进行哪些更改才能以正确的方式执行它?

谢谢大家的回答!

【问题讨论】:

【参考方案1】:

您的值不正确,您需要将每个颜色值除以 255.0。

[UIColor colorWithRed:66.0f/255.0f
                green:79.0f/255.0f
                 blue:91.0f/255.0f
                alpha:1.0f];

文档状态:

+ (UIColor *)colorWithRed:(CGFloat)red
                    green:(CGFloat)green
                     blue:(CGFloat)blue
                    alpha:(CGFloat)alpha

参数

红色 颜色对象的红色分量,指定为 0.0 到 1.0 之间的值。

绿色 颜色对象的绿色分量,指定为 0.0 到 1.0 之间的值。

蓝色 颜色对象的蓝色分量,指定为 0.0 到 1.0 之间的值。

阿尔法 颜色对象的不透明度值,指定为 0.0 到 1.0 之间的值。

Reference here.

【讨论】:

它工作正常,现在我在犯了这样的错误后感觉自己是个白痴!谢谢! UIColor 中有两个新方法接受 0 到 255 之间的整数值。请在此处查看我的答案:***.com/a/58124535/2631081【参考方案2】:

我最喜欢的宏之一,没有任何项目:

#define RGB(r, g, b) [UIColor colorWithRed:(float)r / 255.0 green:(float)g / 255.0 blue:(float)b / 255.0 alpha:1.0]
#define RGBA(r, g, b, a) [UIColor colorWithRed:(float)r / 255.0 green:(float)g / 255.0 blue:(float)b / 255.0 alpha:a]

使用类似:

[attributedString addAttribute:NSForegroundColorAttributeName
                         value:RGB(66, 79, 91)
                         range:NSMakeRange(0, attributedString.length)];

【讨论】:

请尽快? 嗨@JaswanthKumar 检查我对Swift 版本的回答。【参考方案3】:

UIColor 使用范围从 0 到 1.0,而不是整数到 255.. 试试这个:

// create color
UIColor *color = [UIColor colorWithRed:66/255.0
                                 green:79/255.0
                                  blue:91/255.0
                                 alpha:1];

// use in attributed string
[attributedString addAttribute:NSForegroundColorAttributeName
                         value:color
                         range:NSMakeRange(0, attributedString.length)];

【讨论】:

【参考方案4】:

请尝试代码

[attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithRed:77.0/255.0f green:104.0/255.0f blue:159.0/255.0f alpha:1.0] range:NSMakeRange(0, attributedString.length)];

喜欢

Label.textColor=[UIColor colorWithRed:77.0/255.0f green:104.0/255.0f blue:159.0/255.0f alpha:1.0];  

UIColor 的 RGB 分量在 0 到 1 之间缩放,最高不超过 255。

【讨论】:

【参考方案5】:

既然@Jaswanth Kumar 问了,这是来自LSwift 的Swift 版本:

extension UIColor 
    convenience init(rgb:UInt, alpha:CGFloat = 1.0) 
        self.init(
            red: CGFloat((rgb & 0xFF0000) >> 16) / 255.0,
            green: CGFloat((rgb & 0x00FF00) >> 8) / 255.0,
            blue: CGFloat(rgb & 0x0000FF) / 255.0,
            alpha: CGFloat(alpha)
        )
    

用法:let color = UIColor(rgb: 0x112233)

【讨论】:

以上是关于如何从 RGBA 创建 UIColor?的主要内容,如果未能解决你的问题,请参考以下文章

UIColor 不适用于 RGBA 值

RGBA 的 CGColorSpace 在哪里?

如何将UIColor转换为十六进制字符串?

如何将 UIColor 转换为十六进制字符串?

如何从字节数组初始化 RGBA cv::Mat?

从原始 RGBa 数据创建 Sprite