【问题标题】:R Hex to RGB converterR 十六进制到 RGB 转换器
【发布时间】:2017-05-11 09:06:16
【问题描述】:

假设我在 HEX 值中有这种颜色(包括 alpha):

x <- "#FF2400FF"

是否有一个简洁的包可以将 HEX 值转换为 R 中的 RGB 值?还是一段简单的代码来做到这一点?

[#1] c("36 0 255")

编辑:这是RGB to Hex converter问题的相反方式

【问题讨论】:

标签: r


【解决方案1】:

根据已经给出的 cmets,您可以使用以下代码:

x <- "#FF2400FF"
paste(as.vector(col2rgb(x)), collapse = " ")
#> [1] "255 36 0"

但是,查看您请求的结果,您的x 中似乎将 alpha 值作为第一个十六进制数 - 所以您需要创建一个子字符串:

x <- "#FF2400FF"
paste(as.vector(col2rgb(paste0("#", substr(x, 4, 10)))), collapse = " ")
#> [1] "36 0 255"

【讨论】:

    【解决方案2】:

    示例 1

    您可以将 RGB 值作为 一维 数组

    hex.rgba.color <- "#FF2400FF"
    rgb.array <- col2rgb( hex.rgba.color )
    print( rgb.array )
    

    输出

          [,1]
    red    255
    green   36
    blue     0
    

    示例 2

    您可以将redgreenblue值分别作为整数

    hex.rgba.color <- "#FF2400FF"
    rgb.array <- col2rgb( hex.rgba.color )
    message( rgb.array[1] ) # red
    message( rgb.array[2] ) # green
    message( rgb.array[3] ) # blue
    

    输出

    255
    36
    0
    

    示例 3

    您也可以通过简单地添加 alpha=TRUE

    来获得 alpha 值为 integer
    hex.rgba.color <- "#FF2400FF"
    rgba.array <- col2rgb( hex.rgba.color, alpha=TRUE )
    message( rgba.array[1] ) # red
    message( rgba.array[2] ) # green
    message( rgba.array[3] ) # blue
    message( rgba.array[4] ) # alpha
    

    输出

    255
    36
    0
    255
    

    示例 4

    您可以通过使用as.vector() 对数组进行类型转换来将所有值作为vector

    hex.rgba.color <- "#FF2400FF"
    rgba.vector <- as.vector( col2rgb( hex.rgba.color, alpha=TRUE ) )
    print( rgba.vector )
    

    输出

    [1] 255  36   0 255
    

    【讨论】:

      【解决方案3】:

      使用此代码,HEX 颜色字符串被拆分并转换为整数:

      for (color in heat.colors(10)) {
        hex_splitted_color = c(paste('0x', substr(color, 4, 5), sep = ''),
                               paste('0x', substr(color, 6, 7), sep = ''),
                               paste('0x', substr(color, 8, 9), sep = ''))
        print(strtoi(hex_splitted_color))
      }
      [1]   0   0 255
      [1]  36   0 255
      [1]  73   0 255
      [1] 109   0 255
      [1] 146   0 255
      [1] 182   0 255
      [1] 219   0 255
      [1] 255   0 255
      [1] 255  64 255
      [1] 255 191 255
      

      【讨论】:

        【解决方案4】:

        正如@Cath 评论的那样,它存在一个功能来做到这一点:

        col2rgb(heat.colors(10))
        
              [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
        red    255  255  255  255  255  255  255  255  255   255
        green    0   36   73  109  146  182  219  255  255   255
        blue     0    0    0    0    0    0    0    0   64   191
        

        【讨论】:

          猜你喜欢
          • 2015-10-12
          • 2012-10-08
          • 2021-03-22
          • 2021-11-09
          • 2013-03-19
          • 2020-11-14
          相关资源
          最近更新 更多