ios – 是否有将UIColor转换为色相饱和度亮度的功能?

前端之家收集整理的这篇文章主要介绍了ios – 是否有将UIColor转换为色相饱和度亮度的功能?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我可以用RGB值设置uicolor:
  1. [UIColor colorWithRed:0.53 green:0.37 blue:0.11 alpha:1.00];

我可以设置uicolor与hsb值:

  1. [UIColor colorWithHue:0.10 saturation:0.16 brightness:0.13 alpha:1.00];

我也可以将其转换回RGB:

  1. CGFloat* colors = CGColorGetComponents(Color1.CGColor);

但是我可以如何从uicolor获得HSB?

解决方法

使用UIColor方法
getHue:饱和度:亮度:阿尔法:

从苹果文档:
“返回构成HSB颜色空间中颜色的组件.”

  1. - (BOOL)getHue:(CGFloat *)hue saturation:(CGFloat *)saturation brightness:(CGFloat *)brightness alpha:(CGFloat *)alpha

例:

  1. UIColor *testColor = [UIColor colorWithRed:0.53 green:0.37 blue:0.11 alpha:1.00];
  2.  
  3. CGFloat hue;
  4. CGFloat saturation;
  5. CGFloat brightness;
  6. CGFloat alpha;
  7. BOOL success = [testColor getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha];
  8. NSLog(@"success: %i hue: %0.2f,saturation: %0.2f,brightness: %0.2f,alpha: %0.2f",success,hue,saturation,brightness,alpha);

NSLog输出

success: 1 hue: 0.10,saturation: 0.79,brightness: 0.53,alpha: 1.00

以下是@WhiteTiger提供的方法的更正版本:

  1. // Test values
  2. CGFloat red = 0.53;
  3. CGFloat green = 0.37;
  4. CGFloat blue = 0.11;
  5.  
  6. CGFloat hue = 0;
  7. CGFloat saturation = 0;
  8. CGFloat brightness = 0;
  9.  
  10. CGFloat minRGB = MIN(red,MIN(green,blue));
  11. CGFloat maxRGB = MAX(red,MAX(green,blue));
  12.  
  13. if (minRGB==maxRGB) {
  14. hue = 0;
  15. saturation = 0;
  16. brightness = minRGB;
  17. } else {
  18. CGFloat d = (red==minRGB) ? green-blue : ((blue==minRGB) ? red-green : blue-red);
  19. CGFloat h = (red==minRGB) ? 3 : ((blue==minRGB) ? 1 : 5);
  20. hue = (h - d/(maxRGB - minRGB)) / 6.0;
  21. saturation = (maxRGB - minRGB)/maxRGB;
  22. brightness = maxRGB;
  23. }
  24. NSLog(@"hue: %0.2f,value: %0.2f",brightness);

NSLog输出

hue: 0.10,value: 0.53

猜你在找的iOS相关文章