I have seen people do this in objective-c, but I am having trouble with this in swift. I have gotten the color of a pixel from a picture, but now I need to take the individual red, green, and blue values. Here is what I have (h, w, and rgb are integers and image.getPixelColor(CGPoint) returns a UIColor):
xArry[h][w][rgb] = image.getPixelColor(CGPoint(x: w, y: h))
How do I change this UIColor into the red, green, and blue values? Thanks!
let swiftColor = UIColor(red: 1, green: 165/255, blue: 0, alpha: 1) println("RGB Value is:"); println(swiftColor.
To convert a UIColor instance to a hex value, we define a convenience method, toHex(alpha:) . The method accepts one parameter of type Bool , which indicates whether the alpha value should be included in the string that is returned from the method.
You can convert UIColor to CIColor and then extract the color components from it as follow:
Update: Xcode 8.3.2 • Swift 3.1
extension UIColor { var coreImageColor: CIColor { return CIColor(color: self) } var components: (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) { let coreImageColor = self.coreImageColor return (coreImageColor.red, coreImageColor.green, coreImageColor.blue, coreImageColor.alpha) } }
usage:
let myColor = UIColor(red: 0.5, green: 1, blue: 0.25, alpha: 0.5) let myCIColor = myColor.coreImageColor let greencomponent = myColor.components.green let myColorComponents = myColor.components print(myColorComponents.red) // 0.5 print(myColorComponents.green) // 1.0 print(myColorComponents.blue) // 0.25 print(myColorComponents.alpha) // 0.5
You can also use the function getRed() and create an extension to extract the components as follow but the result would be optional:
extension UIColor { typealias RGBA = (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) var rgba: RGBA? { var (r, g, b, a): RGBA = (0, 0, 0, 0) return getRed(&r, green: &g, blue: &b, alpha: &a) ? (r,g,b,a) : nil } var r: CGFloat? { var red: CGFloat = .zero return getRed(&red, green: nil, blue: nil, alpha: nil) ? red : nil } var g: CGFloat? { var green: CGFloat = .zero return getRed(nil, green: &green, blue: nil, alpha: nil) ? green : nil } var b: CGFloat? { var blue: CGFloat = .zero return getRed(nil, green: nil, blue: &blue, alpha: nil) ? blue : nil } var a: CGFloat? { var alpha: CGFloat = .zero return getRed(nil, green: nil, blue: nil, alpha: &alpha) ? alpha : nil } }
Usage
let color = UIColor(red: 0.5, green: 1, blue: 0.25, alpha: 0.5) if let components = color.rgba { print(components.red) // 0.5 print(components.green) // 1.0 print(components.blue) // 0.25 print(components.alpha) // 0.5 } print(color.r ?? "nil") // 0.5 print(color.g ?? "nil") // 1.0 print(color.b ?? "nil") // 0.25 print(color.a ?? "nil") // 0.5
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With