如何在Swift中从UIColor获取RGB代码(INT)

我想在Swift中获取UIColor的RGB值:

let swiftColor = UIColor(red: 1, green: 165/255, blue: 0, alpha: 1)

println("RGB Value is:");

println(swiftColor.getRGB()); <<<<<< How to do that ?

在Java中,我将按以下方式进行操作:

Color cnew = new Color();

int iColor = cnew.rgb(1, 165/255, 0);

System.out.println(iColor);

我应该如何获得这个价值?

回答:

Java

getRGB()

返回一个表示默认sRGB颜色空间中颜色的整数(位24-31是alpha,16-23是红色,8-15是绿色,0-7是蓝色)。

UIColor 没有这种方法,但是您可以定义自己的方法:

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

}

}

}

用法:

let swiftColor = UIColor(red: 1, green: 165/255, blue: 0, alpha: 1)

if let rgb = swiftColor.rgb() {

print(rgb)

} else {

print("conversion failed")

}

请注意,只有UIColor在“兼容RGB”的色彩空间(例如RGB,HSB或GrayScale)中定义了时,此选项才起作用。如果已经从CIColor或图案图像创建了颜色,则可能会失败,在这种情况下将nil被返回。

备注: 正如@ vonox7所注意到的,在32位平台上,返回值可以为负(Java

getRGB()方法也是如此)。如果不希望如此,更换IntUIntInt64

反向转换是

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中从UIColor获取RGB代码(INT) 的全部内容, 来源链接: utcz.com/qa/418620.html

回到顶部