该函数接收一个十六进制颜色,并返回一个命名的向量,其中包含RGB和可能的alpha通道的值。

问题描述 投票:0回答:1

例如,该函数应该这样工作。

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

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

如果所提供的十六进制颜色有一个alpha通道 那么函数就应该这样工作。

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

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

我正在用regex和for循环来写我的函数 但还是遇到了很多问题。

感谢任何建议和帮助

r regex hex rgb
1个回答
2
投票

你可以使用 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" 
© www.soinside.com 2019 - 2024. All rights reserved.