当前位置: 首页 > 面试题库 >

如何在Swift中从UIColor获取RGB代码(INT)

慕仲渊
2023-03-14
问题内容

我想在Swift中获取UIColor的RGB值:

let swiftColor = UIColor(red: 1, green: 165/255, blue: 0, alpha: 1)
println("RGB Value is:");
println(swiftColor.getRGB()); <<<<<< How to do that ?

在Java中,我将按以下方式进行操作:

Color cnew = new Color();
int iColor = cnew.rgb(1, 165/255, 0);
System.out.println(iColor);

我应该如何获得这个价值?


问题答案:

Java
getRGB()
返回一个表示默认sRGB颜色空间中颜色的整数(位24-31是alpha,16-23是红色,8-15是绿色,0-7是蓝色)。

UIColor 没有这种方法,但是您可以定义自己的方法:

extension UIColor {

    func rgb() -> Int? {
        var fRed : CGFloat = 0
        var fGreen : CGFloat = 0
        var fBlue : CGFloat = 0
        var fAlpha: CGFloat = 0
        if self.getRed(&fRed, green: &fGreen, blue: &fBlue, alpha: &fAlpha) {
            let iRed = Int(fRed * 255.0)
            let iGreen = Int(fGreen * 255.0)
            let iBlue = Int(fBlue * 255.0)
            let iAlpha = Int(fAlpha * 255.0)

            //  (Bits 24-31 are alpha, 16-23 are red, 8-15 are green, 0-7 are blue).
            let rgb = (iAlpha << 24) + (iRed << 16) + (iGreen << 8) + iBlue
            return rgb
        } else {
            // Could not extract RGBA components:
            return nil
        }
    }
}

用法:

let swiftColor = UIColor(red: 1, green: 165/255, blue: 0, alpha: 1)
if let rgb = swiftColor.rgb() {
    print(rgb)
} else {
    print("conversion failed")
}

请注意,只有UIColor在“兼容RGB”的色彩空间(例如RGB,HSB或GrayScale)中定义了时,此选项才起作用。如果已经从CIColor或图案图像创建了颜色,则可能会失败,在这种情况下将nil被返回。

备注: 正如@ vonox7所注意到的,在32位平台上,返回值可以为负(Java
getRGB()方法也是如此)。如果不希望如此,更换IntUIntInt64

反向转换是

extension UIColor {
    convenience init(rgb: Int) {
        let iBlue = rgb & 0xFF
        let iGreen =  (rgb >> 8) & 0xFF
        let iRed =  (rgb >> 16) & 0xFF
        let iAlpha =  (rgb >> 24) & 0xFF
        self.init(red: CGFloat(iRed)/255, green: CGFloat(iGreen)/255,
                  blue: CGFloat(iBlue)/255, alpha: CGFloat(iAlpha)/255)
    }
}


 类似资料:
  • 问题内容: 我已经看到人们在Objective- C中做到这一点,但是我很快就遇到了麻烦。我已经从图片中获得了像素的颜色,但是现在我需要分别获取红色,绿色和蓝色的值。这是我所拥有的(h,w和rgb是整数,image.getPixelColor(CGPoint)返回UIColor): 如何将此UIColor更改为红色,绿色和蓝色值?谢谢! 问题答案: 您可以将UIColor转换为CIColor,然后

  • 问题内容: 我有一个十进制颜色代码(例如)。我将其转换为与的十六进制等效项。如何从十六进制颜色代码中获取红色,绿色和蓝色分量值? 问题答案: 假设这是一个字符串:

  • 问题内容: 我是新手,尝试快速创建UIColor类的扩展为 之后,我以以下方式访问该方法 我不知道该声明应作为参数传递给我。 问题答案: 您已经定义了一个 实例方法 ,这意味着您只能在一个实例上调用它: 发生编译器错误“缺少参数”是因为 实例方法是Swift中的Curried Function ,因此可以等效地称为 (但这是一件奇怪的事情,我添加它只是为了解释错误消息的来源。) 但是,您真正想要的

  • 问题内容: 如何从代码块中获取电流? 仅具有: 我可以用代替一个函数,但是有内置功能吗? 问题答案: 使用os.Getenv 从文档: Getenv检索由键命名的环境变量的值。它返回值,如果不存在该变量,则该值为空。 例: Go 1.8+更新 Go 1.8具有通过go / build导出的默认GOPATH:

  • 我需要在CloudKit中获取CkAsset的web url。然而,在swift中,苹果不允许我们获取直接的WebURL,它只下载资产并给我们文件。但是,有了javascript,这是可能的。因此,我编写了一个JS文件来获取CkAsset Weburl。当我在浏览器中运行这个javascript文件时。我试图用下面的代码在swift中运行它,但我不能。我搜索到一个名为“StringByEvalua

  • 我希望检索HTTP响应状态代码(例如,400、401、403、503等),以防请求失败(理想情况下也是成功)。在这段代码中,我使用HTTP Basic执行用户身份验证,并希望能够在用户错误键入密码时向用户发送身份验证失败的消息。 不幸的是,产生的错误似乎并不表示实际收到了HTTP状态代码409: 此外,在发生错误时检索HTTP正文会很好,因为我的服务器端将在那里放置错误的文本描述。 问题 是否可以