【问题标题】:Getting RGB values from UIColors derived from Hex colors从派生自十六进制颜色的 UIColors 获取 RGB 值
【发布时间】:2014-02-06 16:25:20
【问题描述】:

尝试从 UIColor 检索 RGB 值。但是,-[UIColor getRed:blue:green:alpha] 不适用于我的情况。该方法从不返回 YES,我认为这意味着颜色不能转换为 RGB。我认为这是因为我的 UIColor 是从十六进制颜色生成的(例如:#CCCCCC)。

你是如何从 iOS 中基于十六进制的 UIColors 获取 RGB 值的?

【问题讨论】:

标签: ios objective-c uikit uicolor


【解决方案1】:

问题在于您给出的示例。颜色#CCCCCC 是一种灰度颜色,这意味着UIColor 不是用RGB 创建的,而是用灰色创建的。换句话说,它是用UIColor colorWithWhite:alpha: 创建的。由于您的 UIColor 是使用不同于 RGB 的颜色模型创建的,因此使用 getRed:green:blue:alpha: 返回 NO。

你可以这样做:-

UIColor *color =  // your color
CGFloat red, green, blue, alpha;

if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {

    CGFloat white;
    if ([color getWhite:&white alpha:&alpha]) {
        red = green = blue = white;
    } else {
        NSLog(@"Uh oh, not RGB or greyscale");
    }
}

更新:

从 iOS 8 开始,这种行为似乎发生了一些变化。使用 UIColor colorWithWhite:alpha: 创建的颜色的 RGB 值可以使用 UIColor getRed:green:blue:alpha: 获得。在早期版本的 iOS 中,这不起作用。因此需要我最初发布的代码。

【讨论】:

  • 感谢您的解决方案。为什么我们无法获得任何颜色的 RGB 值(不管它是如何生成的),但无论如何......
  • 阅读该方法的文档。它仅适用于使用 RGB 颜色空间创建的颜色。您的某些颜色是使用灰度色彩空间创建的。请记住,从其他颜色空间转换为 RGB 并不总是无损的。例如,从 HSB 到 RGB 是不准确的。
  • 我试过了,但它不起作用:UIColor * color =[UIColor colorWithWhite:0.9 alpha:1.0]; CGFloat red, green, blue, alpha; if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) { CGFloat white; if ([color getWhite:&white alpha:&alpha]) { red = green = blue = white; NSLog(@"r %f g %f b %f white %f",red,green,blue,white); } else { NSLog(@"Uh oh, not RGB or greyscale"); } }
  • @DevC 在末尾而不是中间记录红色、绿色、蓝色值。
  • @DevC 似乎从 iOS 8 开始,使用UIColor getRed:green:blue:alpha: 甚至可以使用UIColor colorWithWhite:alpha: 创建的灰度颜色。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
  • 2014-04-25
  • 2012-11-04
  • 2023-04-07
  • 1970-01-01
相关资源
最近更新 更多