将浮点 RGB 颜色分量转换为 Ruby 中的整数

Convert Float RGB Color Components to Integer in Ruby

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

问题是 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..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"