我有一个项目,我需要将 UIColor 的 RGBA 值作为 8 个字符的十六进制字符串存储在数据库中。例如,[UIColor blueColor] 将是 @"0000FFFF"。我知道我可以像这样获得组件值:
CGFloat r,g,b,a;
[color getRed:&r green:&g blue: &b alpha: &a];
但我不知道如何从这些值转到十六进制字符串。我看过很多关于如何走另一条路的帖子,但对于这种转换没有任何作用。
我有一个项目,我需要将 UIColor 的 RGBA 值作为 8 个字符的十六进制字符串存储在数据库中。例如,[UIColor blueColor] 将是 @"0000FFFF"。我知道我可以像这样获得组件值:
CGFloat r,g,b,a;
[color getRed:&r green:&g blue: &b alpha: &a];
但我不知道如何从这些值转到十六进制字符串。我看过很多关于如何走另一条路的帖子,但对于这种转换没有任何作用。
首先将您的浮点数转换为 int 值,然后使用以下格式进行格式化stringWithFormat
:
int r,g,b,a;
r = (int)(255.0 * rFloat);
g = (int)(255.0 * gFloat);
b = (int)(255.0 * bFloat);
a = (int)(255.0 * aFloat);
[NSString stringWithFormat:@"%02x%02x%02x%02x", r, g, b, a];
就这样吧。返回带有颜色的十六进制值的NSString
(例如)。ffa5678
- (NSString *)hexStringFromColor:(UIColor *)color
{
const CGFloat *components = CGColorGetComponents(color.CGColor);
CGFloat r = components[0];
CGFloat g = components[1];
CGFloat b = components[2];
return [NSString stringWithFormat:@"%02lX%02lX%02lX",
lroundf(r * 255),
lroundf(g * 255),
lroundf(b * 255)];
}
Swift 4 通过扩展 UIColor 回答:
extension UIColor {
var hexString: String {
let colorRef = cgColor.components
let r = colorRef?[0] ?? 0
let g = colorRef?[1] ?? 0
let b = ((colorRef?.count ?? 0) > 2 ? colorRef?[2] : g) ?? 0
let a = cgColor.alpha
var color = String(
format: "#%02lX%02lX%02lX",
lroundf(Float(r * 255)),
lroundf(Float(g * 255)),
lroundf(Float(b * 255))
)
if a < 1 {
color += String(format: "%02lX", lroundf(Float(a)))
}
return color
}
}