【Swift】16進数⇔RGBの相互変換 / UIColor生成
環境
- Xcode 9.3
- Swift 4.1
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) }