问题 从uicolor的十六色


我有一个问题,将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。


10880
2018-04-23 17:34


起源

你可以使用这个库 github.com/burhanuddin353/TFTColor - Burhanuddin Sunelwala


答案:


NSString *hexString = [NSString stringWithFormat:@"#%d", hexValue];

您将其格式化为%d的数字

您希望将其格式化为带有%x或%X的十六进制 - 可能为字符串%s我没有检查函数正在做什么以及什么 int hexValue 持有

d或i有符号十进制整数392

x无符号十六进制整数7fa

X无符号十六进制整数(大写字母)7FA


2
2018-04-23 17:39



thx,为hexString提供一个十六进制颜色,但它与我们的颜色不同[Colorview_ backgroundColor],有些东西缺失,可能是0xFF *组件[3],任何想法如何将它添加到hexValue? - Elyes Jlassi
如果您要查找的颜色是5576149 =#5515D5,只需将int转换为十六进制 - Hitham S. AlQadheeb
NSString * hexString = [NSString stringWithFormat:@“#%X”,hexValue];这里我做了什么,它给了我一个十六进制值(例如#5515D5),但我所说的是:当我使用这个十六进制颜色的javascript,我得到一个错误的颜色,它不是完全相同的我们输入一。 - Elyes Jlassi


上面的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)];
}

12
2017-10-30 07:17





我昨天尝试了,因为我必须从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;
}

1
2017-07-31 18:16





这是一个版本,但格式化为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)];
}

1
2017-08-14 21:15