首页 > 解决方案 > 采用十六进制颜色并返回具有 RGB 值和可能的 alpha 通道值的命名向量的函数

问题描述

例如,该函数应该像这样工作:

# colors with no transparency
hex_values("#435690")

## red  green  blue
## "43" "56"   "90"

如果提供的 hex-color 有一个 alpha 通道,那么函数应该像这样工作:

# colors with transparency
hex_values("#435690FF")

## red  green  blue  alpha
## "43" "56"   "90"  "FF"

我正在使用正则表达式和 for 循环来编写我的函数,但仍然遇到很多问题。

任何建议/帮助表示赞赏!

标签: rregexhexrgb

解决方案


您可以使用col2rgb()和转置结果:

t(col2rgb("#435690FF", alpha = TRUE))

     red green blue alpha
[1,]  67    86  144   255

或者正如 r2evans 指出的那样,要恢复为十六进制值,请将其包装在as.hexmode().

t(as.hexmode(col2rgb("#435690FF", alpha = TRUE)))

     red  green blue alpha
[1,] "43" "56"  "90" "ff" 

要合并注释并将其全部包装到一个函数中:

hex_values <- function(x) {
  clr <- ifelse(startsWith(x, "#"), x, paste0("#", x))
  t(toupper(as.hexmode(col2rgb(clr, alpha = TRUE))))
}

hex_values(colorRampPalette(c("red", "blue"))(5))

     red  green blue alpha
[1,] "FF" "00"  "00" "FF" 
[2,] "BF" "00"  "3F" "FF" 
[3,] "7F" "00"  "7F" "FF" 
[4,] "3F" "00"  "BF" "FF" 
[5,] "00" "00"  "FF" "FF" 

推荐阅读