如何将RGB值转换为十六进制字符串iOS swift
Posted
技术标签:
【中文标题】如何将RGB值转换为十六进制字符串iOS swift【英文标题】:How to convert RGB values to HEX string iOS swift 【发布时间】:2018-03-07 11:32:15 【问题描述】:我想将 RGB 值转换为十六进制字符串。我将 Hex 转换为 RGB,如下所示,反之亦然。
func hexStringToRGB(_ hexString: String) -> (red: CGFloat, green: CGFloat, blue: CGFloat)
var cString:String = hexString.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()
if (cString.hasPrefix("#"))
cString.remove(at: cString.startIndex)
if ((cString.count) != 6)
return (red: 0.0, green: 0.0, blue: 0.0)
var rgbValue:UInt32 = 0
Scanner(string: cString).scanHexInt32(&rgbValue)
return (
red: CGFloat((rgbValue & 0xFF0000) >> 16),
green: CGFloat((rgbValue & 0x00FF00) >> 8),
blue: CGFloat(rgbValue & 0x0000FF))
【问题讨论】:
How to use hex colour values的可能重复 根据答案,返回 UIColor 但我想要十六进制字符串而不是颜色 crunchybagel.com/working-with-hex-colors-in-swift-3 找到此链接.. 可能对您有用 【参考方案1】:@Cristik 是绝对正确的,除此之外,请在下面找到
使用这个 UIColor 扩展类,
extension UIColor
func toHexString() -> String
var r:CGFloat = 0
var g:CGFloat = 0
var b:CGFloat = 0
var a:CGFloat = 0
getRed(&r, green: &g, blue: &b, alpha: &a)
let rgb:Int = (Int)(r*255)<<16 | (Int)(g*255)<<8 | (Int)(b*255)<<0
return NSString(format:"#%06x", rgb) as String
convenience init(red: Int, green: Int, blue: Int)
assert(red >= 0 && red <= 255, "Invalid red component")
assert(green >= 0 && green <= 255, "Invalid green component")
assert(blue >= 0 && blue <= 255, "Invalid blue component")
self.init(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: 1.0)
你会以这种方式得到你的输出,
let color = UIColor(red: 1, green: 2, blue: 3, alpha: 1.0)
let hexString = color.toHexString()
print(hexString);
你的输出将是这个,
#fffefd
如有任何疑问,请告诉我。
【讨论】:
【参考方案2】:let rgbRedValue = 200
let rgbGreenValue = 13
let rgbBlueValue = 45
let hexValue = String(format:"%02X", Int(rgbRedValue)) + String(format:"%02X", Int(rgbGreenValue)) + String(format:"%02X", Int(rgbBlueValue))
另一种解决方法是将RGB
转换为UIColor
并从UIColor
获取HEX
字符串。
【讨论】:
【参考方案3】:斯威夫特 4:
public static func rgbToHex(color: UIColor) -> String
var r:CGFloat = 0
var g:CGFloat = 0
var b:CGFloat = 0
var a:CGFloat = 0
color.getRed(&r, green: &g, blue: &b, alpha: &a)
let rgb:Int = (Int)(r*255)<<16 | (Int)(g*255)<<8 | (Int)(b*255)<<0
return String(format: "#%06x", rgb)
【讨论】:
以上是关于如何将RGB值转换为十六进制字符串iOS swift的主要内容,如果未能解决你的问题,请参考以下文章