我有 RGBA(红、绿、蓝、阿尔法)的值。我知道我们可以通过使用这些东西来获取 UIColor 值
UIColor *currentColor = [UIColor colorWithRed: 1 green:1 blue:0 alpha:1];
但是有没有一种方法可以让我使用 iOS 中的 RGBA 值直接获取颜色的十六进制代码字符串。
我有 RGBA(红、绿、蓝、阿尔法)的值。我知道我们可以通过使用这些东西来获取 UIColor 值
UIColor *currentColor = [UIColor colorWithRed: 1 green:1 blue:0 alpha:1];
但是有没有一种方法可以让我使用 iOS 中的 RGBA 值直接获取颜色的十六进制代码字符串。
我认为您不能直接从 UIColor 对象中获取十六进制字符串。您需要从 UIColor 对象中获取 Red、Green 和 Blue 组件并将它们转换为十六进制并附加。
你总是可以创造这样的东西
-(NSString *) UIColorToHexString:(UIColor *)uiColor{
CGColorRef color = [uiColor CGColor];
int numComponents = CGColorGetNumberOfComponents(color);
int red,green,blue, alpha;
const CGFloat *components = CGColorGetComponents(color);
if (numComponents == 4){
red = (int)(components[0] * 255.0) ;
green = (int)(components[1] * 255.0);
blue = (int)(components[2] * 255.0);
alpha = (int)(components[3] * 255.0);
}else{
red = (int)(components[0] * 255.0) ;
green = (int)(components[0] * 255.0) ;
blue = (int)(components[0] * 255.0) ;
alpha = (int)(components[1] * 255.0);
}
NSString *hexString = [NSString stringWithFormat:@"#%02x%02x%02x%02x",
alpha,red,green,blue];
return hexString;
}
编辑:在 iOS 5.0 中,您可以很容易地获得红色、绿色、蓝色组件
CGFloat red,green,blue,alpha;
[uicolor getRed:&red green:&green blue:&blue alpha:&alpha]
所以上面的函数可以改成
-(NSString *) UIColorToHexString:(UIColor *)uiColor{
CGFloat red,green,blue,alpha;
[uiColor getRed:&red green:&green blue:&blue alpha:&alpha]
NSString *hexString = [NSString stringWithFormat:@"#%02x%02x%02x%02x",
((int)alpha),((int)red),((int)green),((int)blue)];
return hexString;
}
您可以NSString
使用以下代码将浮点值转换为 a:
float r = 0.5, g = 1.0, b = 1.0, a = 1.0;
NSString *s = [[NSString alloc] initWithFormat: @"%02x%02x%02x%02x",
(int) (r * 255), (int) (g * 255), (int) (b * 255), (int) (a * 255)];
NSLog(@"%@", s);
您可以手动将颜色值转换为十六进制。这很容易。如果你有颜色值说
float redValue = 0.5;
您可以按如下方式计算相应的十六进制值。
redValue*=255;
NSString *hex = [NSString stringWithFormat:@"%02x",(int)redValue];