RGB到Hex转换器

wooyq4lh  于 2023-01-18  发布在  其他
关注(0)|答案(4)|浏览(178)

假设我有这个向量

x <- c("165 239 210", "111 45 93")

有没有一个简洁的包可以将RGB值转换为R中的十六进制值?我发现了许多JavaScript方法,但没有一个适合R。

x <- "#A5EFD2" "#6F2D5D"
4ioopgfo

4ioopgfo1#

只需将字符串拆分,然后使用rgb

x <- c("165 239 210", "111 45 93")
sapply(strsplit(x, " "), function(x)
    rgb(x[1], x[2], x[3], maxColorValue=255))
#[1] "#A5EFD2" "#6F2D5D"
uttx8gqw

uttx8gqw2#

这个答案是基于answer to this same question by Hong Ooi的,但是定义了一个函数rgb2col function,**将col2rgb**返回的rgb值矩阵作为输入,这意味着我们可以只使用这两个函数在hex和rgb之间进行转换,换句话说,rgb2col(col2rgb(x)) = col2rgb(rgb2col(x)) = x

输入结构

col2rgb()返回的RGB颜色矩阵开始。例如:

[,1] [,2]
red    213    0
green   94  158
blue     0  115

功能

此函数将矩阵转换为十六进制颜色矢量。

rgb2col = function(rgbmat){
  # function to apply to each column of input rgbmat
  ProcessColumn = function(col){
    rgb(rgbmat[1, col], 
        rgbmat[2, col], 
        rgbmat[3, col], 
        maxColorValue = 255)
  }
  # Apply the function
  sapply(1:ncol(rgbmat), ProcessColumn)
}

用例示例

你可能想手动修改一个调色板,但是使用十六进制数会感觉不舒服。例如,假设我想稍微变暗一点两种颜色的矢量。

# Colors to darken
ColorsHex = c("#D55E00","#009E73")

# Convert to rgb
# This is the step where we get the matrix
ColorsRGB = col2rgb(ColorsHex)

# Darken colors by lowering values of RGB
ColorsRGBDark = round(ColorsRGB*.7)

# Convert back to hex
ColorsHexDark = rgb2col(ColorsRGBDark)
kuhbmx9i

kuhbmx9i3#

可以转换为数值矩阵并使用colourvalues::convert_colours()

colourvalues::convert_colours( 
  matrix( as.numeric( unlist( strsplit(x, " ") ) ) , ncol = 3, byrow = T)
)
# [1] "#A5EFD2" "#6F2D5D"
blmhpbnm

blmhpbnm4#

你可以使用R中的sprint函数和下面文章中的提示:How to display hexadecimal numbers in C?

相关问题