hexadecimal from convert color swift rgb uicolor

from - Cómo obtener el Código RGB(INT) de un UIColor en Swift



uicolor hexadecimal swift (6)

De la respuesta de Martin R: El método también podría devolver una tupla con nombre (una función Swift 2):

extension UIColor { func rgb() -> (red:Int, green:Int, blue:Int, alpha:Int)? { var fRed : CGFloat = 0 var fGreen : CGFloat = 0 var fBlue : CGFloat = 0 var fAlpha: CGFloat = 0 if self.getRed(&fRed, green: &fGreen, blue: &fBlue, alpha: &fAlpha) { let iRed = Int(fRed * 255.0) let iGreen = Int(fGreen * 255.0) let iBlue = Int(fBlue * 255.0) let iAlpha = Int(fAlpha * 255.0) return (red:iRed, green:iGreen, blue:iBlue, alpha:iAlpha) } else { // Could not extract RGBA components: return nil } } }

Me gustaría obtener el valor RGB de un UIColor en Swift:

let swiftColor = UIColor(red: 1, green: 165/255, blue: 0, alpha: 1) println("RGB Value is:"); println(swiftColor.getRGB()); <<<<<< How to do that ?

En Java lo haría de la siguiente manera:

Color cnew = new Color(); int iColor = cnew.rgb(1, 165/255, 0); System.out.println(iColor);

¿Cómo debo obtener este valor?


En Swift puede usar Color Literal para obtener color RGB.

Así

Espero que esto sea útil para alguien.


Escribió una extensión que puede usar. Elegí devolver los valores como CGFloat s en lugar de Int s porque CGFloat es lo que toma el método init de UIColor

extension UIColor { var colorComponents: (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)? { guard let components = self.cgColor.components else { return nil } return ( red: components[0], green: components[1], blue: components[2], alpha: components[3] ) } }

Nota: Swift 3.1 / iOS 10 compatible, puede no funcionar en iOS 9 ya que UIColor.cgColor.components puede no estar disponible


Java getRGB() devuelve un número entero que representa el color en el espacio de color sRGB predeterminado (los bits 24-31 son alfa, 16-23 son rojos, 8-15 son verdes, 0-7 son azules).

UIColor no tiene dicho método, pero puede definir el suyo propio:

extension UIColor { func rgb() -> Int? { var fRed : CGFloat = 0 var fGreen : CGFloat = 0 var fBlue : CGFloat = 0 var fAlpha: CGFloat = 0 if self.getRed(&fRed, green: &fGreen, blue: &fBlue, alpha: &fAlpha) { let iRed = Int(fRed * 255.0) let iGreen = Int(fGreen * 255.0) let iBlue = Int(fBlue * 255.0) let iAlpha = Int(fAlpha * 255.0) // (Bits 24-31 are alpha, 16-23 are red, 8-15 are green, 0-7 are blue). let rgb = (iAlpha << 24) + (iRed << 16) + (iGreen << 8) + iBlue return rgb } else { // Could not extract RGBA components: return nil } } }

Uso:

let swiftColor = UIColor(red: 1, green: 165/255, blue: 0, alpha: 1) if let rgb = swiftColor.rgb() { print(rgb) } else { print("conversion failed") }

Tenga en cuenta que esto solo funcionará si UIColor se ha definido en un espacio de color "compatible con RGB" (como RGB, HSB o GrayScale). Puede fallar si el color se ha creado a partir de un CIColor o una imagen de patrón, en ese caso se devuelve nil .

Observación: Como notó @ vonox7, el valor devuelto puede ser negativo en plataformas de 32 bits (que también es el caso con el método getRGB() Java). Si eso no se desea, reemplace Int por UInt o Int64 .

La conversión inversa es

extension UIColor { convenience init(rgb: Int) { let iBlue = rgb & 0xFF let iGreen = (rgb >> 8) & 0xFF let iRed = (rgb >> 16) & 0xFF let iAlpha = (rgb >> 24) & 0xFF self.init(red: CGFloat(iRed)/255, green: CGFloat(iGreen)/255, blue: CGFloat(iBlue)/255, alpha: CGFloat(iAlpha)/255) } }


Swift 3.0 IOS 10

let colour = UIColor.red let rgbColour = colour.cgColor let rgbColours = rgbColour.components


Swift 4. Obteniendo el código hexadecimal (UInt) de UIColor:

extension UIColor { var coreImageColor: CIColor { return CIColor(color: self) } var hex: UInt { let red = UInt(coreImageColor.red * 255 + 0.5) let green = UInt(coreImageColor.green * 255 + 0.5) let blue = UInt(coreImageColor.blue * 255 + 0.5) return (red << 16) | (green << 8) | blue } }