元柔道整復師エンジニアBlog

- 元柔道整復師エンジニアBlog -

『 エンジニアをリングする。』

【Swift】16進数⇔RGBの相互変換 / UIColor生成

環境

16進数 ⇒ RGB

RGB値を配列で返却する

/**
 16進数からRGB値へ変換する.
 - parameter String: 16進数
 - returns [Int]: RGB
 */
func hexToRGB(hex color: String) -> [Int]{
    var rgb:[Int] = []
    let scanner = Scanner(string: color as String)
    var color:UInt32 = 0
    if(scanner.scanHexInt32(&color)) {
        let r = (color & 0xFF0000) >> 16
        let g = (color & 0x00FF00) >> 8
        let b = (color & 0x0000FF)
        rgb.append(Int(r))
        rgb.append(Int(g))
        rgb.append(Int(b))
    }
    return rgb
}
print(hexToRGB(hex: "FFFFFF")) // [255, 255, 255]

16進数 ⇒ UIColor

UIColorクラスを拡張する

extension UIColor {
    
    /**
     16進数からUIColorへ変換する.
     - parameter String: 16進数
     - returns UIColor: RGB
     */
    class func hexToRgb(color: String, alpha : CGFloat = 1) -> UIColor {
        let code = color
        let scanner = Scanner(string: code as String)
        var color:UInt32 = 0
        if scanner.scanHexInt32(&color) {
            let r = (color & 0xFF0000) >> 16
            let g = (color & 0x00FF00) >> 8
            let b = (color & 0x0000FF)
            return UIColor(red: CGFloat(r), green: CGFloat(g), blue: CGFloat(b), alpha:alpha)
        } else {
            print("invalid hex string")
            return UIColor.clear;
        }
    }
}
print(UIColor.hexToRgb(color: "ffffff")) // UIExtendedSRGBColorSpace 255 255 255 1
print(UIColor.hexToRgb(color: "FF0000", alpha: 0.8)) // UIExtendedSRGBColorSpace 255 0 0 0.8

RGB ⇒ 16進数

/**
 RGB値から16進数へ変換する.
 - parameter Int: RGB
 - returns String: 16進数
 */
func rgbToHex(red r: Int, green g: Int, blue b: Int) -> String {
    return String(NSString(format: "%02X%02X%02X", r, g, b))
}
print("#\(rgbToHex(red: 255, green: 255, blue: 255))") // #FFFFFF

今週のお題「2019年の抱負」

RGB ⇒ UIColor

/**
 RGB値からUIColorへ変換する.
 - parameter Int: RGB
 - parameter CGFloat: alpha
 - returns UIColor
 */
func rgbToColor(red r: Int, green g: Int, blue b: Int, alpha: CGFloat = 1) -> UIColor {
    return UIColor(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: alpha)
}

参考