使用colorspace包进行错误的颜色转换

时间:2012-10-11 07:43:06

标签: r colors

请看以下示例:

> library(colorspace)
> # convert color with coordinates (0.2,0.3,0.4) in the RGB space into a character string:
> ( x <- hex(RGB(0.2,0.3,0.4)) )
[1] "#7C95AA"
> # reverse conversion:
> hex2RGB(x)  ## not the original coordinates !
             R         G         B
[1,] 0.4862745 0.5843137 0.6666667
> # now do the first conversion with the rgb() function from grDevices package:
> library(grDevices)
> ( y <- rgb(0.2,0.3,0.4) )
[1] "#334C66"
> # reverse conversion:
> hex2RGB(y)  ## close to the original coordinates
       R         G   B
[1,] 0.2 0.2980392 0.4

似乎RGB颜色空间中三个坐标转换为字符串的颜色空间包中的hex()函数是错误的。这是一个错误,还是我错误地使用了包裹?

1 个答案:

答案 0 :(得分:0)

转换的差异是由于使用线性化的RGB颜色模型而不是经过伽玛校正的sRGB颜色模型。后者由base R和大多数其他为图形生成颜色的软件使用。前者是转换为其他模型(例如CIE XYZ)的中间步骤,如下所示,该模型也在colorspace包中提供。

colorspace

如果您使用的是sRGB函数,那么您的示例将按预期工作:

library("colorspace")
( x <- hex(sRGB(0.2, 0.3, 0.4)) )
## [1] "#334D66"
hex2RGB(x)
##        R         G   B
## [1,] 0.2 0.3019608 0.4

G坐标不同的原因是0.3 * 255不是整数。 (十六进制颜色代码为0到255之间的整数。)