Функция, которая принимает шестнадцатеричный цвет и возвращает именованный вектор со значениями RGB и, возможно, альфа-каналов. - PullRequest
0 голосов
/ 23 апреля 2020

Например, функция должна работать следующим образом:

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

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

Если предоставленный шестнадцатеричный цвет имеет альфа-канал, то функция должна работать следующим образом:

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

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

Я делаю это с помощью регулярных выражений и циклов для написания своей функции, но все еще сталкиваюсь со многими проблемами.

Любой совет / помощь приветствуется!

1 Ответ

2 голосов
/ 23 апреля 2020

Вы можете использовать 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" 
...