我在将uicolor转换为十六进制颜色方面存在问题,这是我发现的
CGColorRef colorref = [[Colorview_ backgroundColor] CGColor];
int numComponents = CGColorGetNumberOfComponents(colorref);
if (numComponents == 4) {
const CGFloat *components = CGColorGetComponents(colorref);
int hexValue = 0xFF0000*components[0] + 0xFF00*components[1] + 0xFF*components[2];
NSString *hexString = [NSString stringWithFormat:@"#%d", hexValue];
}
这段代码给了我#5576149(例如)为hexString,我们你看到有7位不是6,它不是十六进制颜色,任何帮助将不胜感激,thx。
答案 0 :(得分:13)
上面的sylphos答案对于darkGrayColor不起作用。
效果更好(取自http://softteco.blogspot.jp/2011/06/extract-hex-rgb-color-from-uicolor.html):
- (NSString *) hexFromUIColor:(UIColor *)color {
if (CGColorGetNumberOfComponents(color.CGColor) < 4) {
const CGFloat *components = CGColorGetComponents(color.CGColor);
color = [UIColor colorWithRed:components[0] green:components[0] blue:components[0] alpha:components[1]];
}
if (CGColorSpaceGetModel(CGColorGetColorSpace(color.CGColor)) != kCGColorSpaceModelRGB) {
return [NSString stringWithFormat:@"#FFFFFF"];
}
return [NSString stringWithFormat:@"#%02X%02X%02X", (int)((CGColorGetComponents(color.CGColor))[0]*255.0), (int)((CGColorGetComponents(color.CGColor))[1]*255.0), (int)((CGColorGetComponents(color.CGColor))[2]*255.0)];
}
答案 1 :(得分:2)
NSString *hexString = [NSString stringWithFormat:@"#%d", hexValue];
您将其格式化为%d
的数字您希望将其格式化为带有%x或%X的十六进制 - 可能是字符串%s我没有检查函数正在做什么以及int hexValue
持有什么
d或i有符号十进制整数392
x无符号十六进制整数7fa
X无符号十六进制整数(大写字母)7FA
答案 2 :(得分:2)
我昨天尝试过,因为我必须从uicolor中获取十六进制颜色并使其在javascript中工作,但是当组件为0时这不起作用,因为它得到0而不是00。 因此纯青色将是RGB 0 255 255,此代码将返回#0ffff而不是#00ffff。
我从你的代码制作了这个代码,它正在我的应用程序上运行:
-(NSString*)colorToHex:(UIColor*)color{
CGColorRef colorref = [color CGColor];
const CGFloat *components = CGColorGetComponents(colorref);
NSString *hexString = @"#";
int hexValue = 0;
for (int i=0; i<3; i++) {
if (components[i] == 0) {
hexString = [NSString stringWithFormat:@"%@00", hexString];
}else{
hexValue = 0xFF*components[i];
hexString = [NSString stringWithFormat:@"%@%x", hexString, hexValue];
}
}
return hexString;
}
答案 3 :(得分:1)
以下是此版本,但格式为C函数:
static inline NSString *hexFromUIColor(UIColor * _color) {
if (CGColorGetNumberOfComponents(_color.CGColor) < 4) {
const CGFloat *components = CGColorGetComponents(_color.CGColor);
_color = [UIColor colorWithRed:components[0] green:components[0] blue:components[0] alpha:components[1]];
}
if (CGColorSpaceGetModel(CGColorGetColorSpace(_color.CGColor)) != kCGColorSpaceModelRGB) {
return [NSString stringWithFormat:@"#FFFFFF"];
}
return [NSString stringWithFormat:@"#%02X%02X%02X", (int)((CGColorGetComponents(_color.CGColor))[0]*255.0), (int)((CGColorGetComponents(_color.CGColor))[1]*255.0), (int)((CGColorGetComponents(_color.CGColor))[2]*255.0)];
}