您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

JavagetRGB() 返回一个表示认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位平台上,返回值可以为负(JavagetRGB()方法也是如此)。如果不希望如此,更换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)
    }
}
Swift 2022/1/1 18:15:55 有466人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶