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 @   DDD-SagerKing  阅读(888)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示
主题色彩