Extrae valores RGB de UIColor

He visto a gente hacer esto en Objective-c, pero estoy teniendo problemas con esto rápidamente. Obtuve el color de un píxel de una imagen, pero ahora necesito tomar los valores individuales de rojo, verde y azul. Esto es lo que tengo (h, w, y rgb son enteros y image.getPixelColor (CGPoint) devuelve un UIColor):

xArry[h][w][rgb] = image.getPixelColor(CGPoint(x: w, y: h)) 

¿Cómo cambio este UIColor en los valores rojo, verde y azul? ¡Gracias!

Puede convertir UIColor en CIColor y luego extraer los componentes de color de la siguiente manera:

Actualización: 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) } } 

uso:

 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 


También puede usar la función getRed () y crear una extensión para extraer los componentes de la siguiente manera, pero el resultado sería opcional:

 extension UIColor { var components: (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)? { var r: CGFloat = 0, g: CGFloat = 0, b: CGFloat = 0, a: CGFloat = 0 return getRed(&r, green: &g, blue: &b, alpha: &a) ? (r,g,b,a) : nil } } 

Uso

 let myColor = UIColor(red: 0.5, green: 1, blue: 0.25, alpha: 0.5) if let myColorComponents = myColor.components { print(myColorComponents.red) // 0.5 print(myColorComponents.green) // 1.0 print(myColorComponents.blue) // 0.25 print(myColorComponents.alpha) // 0.5 } 

para UIColor puedes usar el método getRed:

 let yourColor = UIColor(red: 0/255, green: 184/255, blue: 48/255, alpha: 1.0) var r: CGFloat = 0, g: CGFloat = 0, b: CGFloat = 0, a: CGFloat = 0 yourColor.getRed(&r, green: &g, blue: &b, alpha: &a) print("red: \(r), green: \(g), blue: \(b)") 

Puede usar CGColorGetComponents para obtener una matriz de color de un CGColor (no probado en swift3)

 const CGFloat *_components = CGColorGetComponents(yourUIColor.CGColor); CGFloat red = _components[0]; CGFloat green = _components[1]; CGFloat blue = _components[2]; CGFloat alpha = _components[3]; 

También puede encontrar la cantidad de componentes de color de ese color con

 CGColorGetNumberOfComponents 

Debe verificar la cantidad de componentes antes de obtener los valores. El color gris tiene 2 componentes (gris y alfa), los colores rgb tienen 4 componentes: R, G, B, A

https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGColor/index.html#//apple_ref/c/func/CGColorGetNumberOfComponents

No probado pero esto debería funcionar. Acabo de encontrarlo:

  xArry[h][w][rgb] = Int(image.getPixelColor(CGPoint(x: w, y: h)).CIColor.red())