【问题标题】:Convert Float RGB Color Components to Integer in Ruby在 Ruby 中将浮点 RGB 颜色分量转换为整数
【发布时间】:2017-04-05 08:25:17
【问题描述】:

我需要将 Cucumber 提供的浮点 RGB 值从 iOS 应用程序转换为 Ints,以便我可以将它们作为十六进制颜色与预期的十六进制颜色进行比较。

问题是 Ruby to_s(16) 仅适用于 Fixnums,而不适用于浮点数。

Cucumber 从 iOS 应用中获取这个:

{
      "red" => 0.7490196078431373,
    "alpha" => 1,
     "type" => "UIDeviceRGBColor",
     "blue" => 0,
    "green" => 0
}

所以我需要将三个浮点 RGB 值转换为十六进制字符串。但我不能只说 r.to_s(16)。如何将值正确转换为整数,以便能够在 Ruby 中将它们与字符串基转换一起使用?

【问题讨论】:

  • 提示:0.7490196078431373 * 255 #=> 191.0
  • 好的,就这么简单。如果您将此作为答案,我会接受。

标签: ios ruby colors cucumber


【解决方案1】:

源值在 0..1 范围内,而目标值在 0..255 范围内(或 0..0xFF 用于十六进制)。

首先,让我们获取值:

data = {
      "red" => 0.7490196078431373,
    "alpha" => 1,
     "type" => "UIDeviceRGBColor",
     "blue" => 0,
    "green" => 0
}

values = data.values_at('red', 'green', 'blue')
#=> [0.7490196078431373, 0, 0]

现在我们可以将它们乘以 255:

values.map! { |v| (v * 255).round }
#=> [191, 0, 0]

最后将它们格式化为十六进制值:

'%02x%02x%02x' % values
#=> "bf0000"

【讨论】:

    猜你喜欢
    • 2013-06-15
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2022-12-15
    • 2010-11-24
    • 2013-11-12
    • 2020-01-16
    相关资源
    最近更新 更多