ios - custom - uicolor swift 4
Extrae valores RGB de UIColor (4)
No probado pero esto debería funcionar. Acabo de encontrarlo:
xArry[h][w][rgb] = Int(image.getPixelColor(CGPoint(x: w, y: h)).CIColor.red())
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
}
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
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)")