由于int表示,无法将十六进制颜色转换为rgb

时间:2013-05-21 07:54:05

标签: objective-c colors hex converter uicolor

我正在从网上下载十六进制颜色,当我尝试将其转换为RGB时,它无效。

我正在使用此功能:

#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

我认为问题是当我从互联网获得价值(例如000)时我将其转换为int所以我可以将其作为参数传递给上面的函数,int表示为0,因此函数无法识别颜色。同样的事情,例如090,当它在90中时。

1 个答案:

答案 0 :(得分:0)

您需要将十六进制颜色视为字符串并分别处理每个组件。

颜色#3B9具有数字“3”“B”和“9”

但是,查看here您会看到,对于3位数表示,字符加倍。

所以在这种情况下,颜色实际上是#33BB99: 红色= 3 * 16 + 3 = 51 绿色= 11 * 16 + 11 = 187 蓝色= 8 * 16 + 8 = 136 alpha = 255

所以'#3B9'的颜色会变成: [51 / 255.0,187 / 255.0,136 / 255.0,1.0]

因此,您应首先确定字符串是否以压缩方式表示颜色,并在必要时重复数字。然后将数字对转换为十进制值,然后转换为UIColor。

希望有所帮助,我希望我的计算是正确的。我对Objective-C不好,所以我不会提供代码,但它应该很容易编写你自己的函数,虽然我敢打赌这个函数已经存在于某处。