Loading

IOS:UIColor对象rgb值转换为16进制

项目中碰到一个问题,实时设置灯光的颜色。

通过蓝牙把协议命令发给设备,命令后面带上软件界面当前选择的颜色的十六进制。

获取当前颜色用的是WSColorModeViewController框架,

回调的对象是UIColor类型,看了看框架代码,感觉还是改使用对象的地方,把color对象转为16进制

下面这个方法可以把color对象,本质上是把颜色的rgb值转为16进制

如果有需要,可以在最后的return的字符串加0x或者其他符号,看个人需求

 

       

-(NSString *)hexadecimalFromUIColor: (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"];

}
      NSString *r,*g,*b;
      (int)((CGColorGetComponents(color.CGColor))[0]*255.0) == 0?(r =[NSString stringWithFormat:@"0%x",(int)     ((CGColorGetComponents(color.CGColor))[0]*255.0)]):(r= [NSString stringWithFormat:@"%x",(int)((CGColorGetComponents(color.CGColor))[0]*255.0)]);

      (int)((CGColorGetComponents(color.CGColor))[1]*255.0)== 0?(g = [NSString stringWithFormat:@"0%x",(int)((CGColorGetComponents(color.CGColor))[1]*255.0)]):(g= [NSString stringWithFormat:@"%x",(int)((CGColorGetComponents(color.CGColor))[1]*255.0)]);

      (int)((CGColorGetComponents(color.CGColor))[2]*255.0)== 0?(b = [NSString stringWithFormat:@"0%x",(int)((CGColorGetComponents(color.CGColor))[2]*255.0)]):(b= [NSString stringWithFormat:@"%x",(int)((CGColorGetComponents(color.CGColor))[2]*255.0)]);
       
return
[NSString stringWithFormat:@"%@%@%@",r,g,b]; }

 

 ================9.9分割线=========

上面这个方法多少是有点问题的,调亮度的时候在亮度最低的时候,发现整个颜色都不对了

看了下打印的日志,发现出现了少位的问题,正常的应该6位,但是打印日志只有5位

于是网上找了找,发现了下面的这个方法。这个方法测了下,没有出现颜色转换出问题的情况

 

 1 //把颜色转为16进制的代码
 2 -(NSString *)hexadecimalFromUIColor: (UIColor*) color {
 3   const CGFloat *components = CGColorGetComponents(color.CGColor);
 4 
 5     CGFloat r = components[0];
 6     CGFloat g = components[1];
 7     CGFloat b = components[2];
 8 
 9     return [NSString stringWithFormat:@"%02lX%02lX%02lX",
10             lroundf(r * 255),
11             lroundf(g * 255),
12             lroundf(b * 255)];
13 }

 

 

 

 

 

 

posted @ 2020-09-03 11:00  DDD-SagerKing  阅读(916)  评论(0)    收藏  举报