Last chance! 50% off unlimited learning
Sale ends in
These functions specify colour spaces for use in
convertColor
.
make.rgb(red, green, blue, name = NULL, white = "D65",
gamma = 2.2)colorConverter(toXYZ, fromXYZ, name, white = NULL)
Chromaticity (xy or xyY) of RGB primaries
Name for the colour space
Character string specifying the reference white (see ‘Details’.)
Display gamma (nonlinearity). A positive number or the
string "sRGB"
Function to convert from XYZ tristimulus coordinates to this space
Function to convert from this space to XYZ tristimulus coordinates.
An object of class colorConverter
An RGB colour space is defined by the chromaticities of the red, green and blue primaries. These are given as vectors of length 2 or 3 in xyY coordinates (the Y component is not used and may be omitted). The chromaticities are defined relative to a reference white, which must be one of the CIE standard illuminants: "A", "B", "C", "D50", "D55", "D60", "E" (usually "D65").
The display gamma is most commonly 2.2, though 1.8 is used for Apple RGB.
The sRGB standard specifies a more complicated function that is close
to a gamma of 2.2; gamma = "sRGB"
uses this function.
Colour spaces other than RGB can be specified directly by giving
conversions to and from XYZ tristimulus coordinates.
The functions should take two arguments. The first is a vector giving the
coordinates for one colour. The second argument is the reference
white. If a specific reference white is included in the definition of
the colour space (as for the RGB spaces) this second argument should
be ignored and may be ...
.
Conversion algorithms from http://www.brucelindbloom.com.
# NOT RUN {
(pal <- make.rgb(red = c(0.6400, 0.3300),
green = c(0.2900, 0.6000),
blue = c(0.1500, 0.0600),
name = "PAL/SECAM RGB"))
## converter for sRGB in #rrggbb format
hexcolor <- colorConverter(toXYZ = function(hex, ...) {
rgb <- t(col2rgb(hex))/255
colorspaces$sRGB$toXYZ(rgb, ...) },
fromXYZ = function(xyz, ...) {
rgb <- colorspaces$sRGB$fromXYZ(xyz, ..)
rgb <- round(rgb, 5)
if (min(rgb) < 0 || max(rgb) > 1)
as.character(NA)
else rgb(rgb[1], rgb[2], rgb[3])},
white = "D65", name = "#rrggbb")
(cols <- t(col2rgb(palette())))
zapsmall(luv <- convertColor(cols, from = "sRGB", to = "Luv", scale.in = 255))
(hex <- convertColor(luv, from = "Luv", to = hexcolor, scale.out = NULL))
## must make hex a matrix before using it
(cc <- round(convertColor(as.matrix(hex), from = hexcolor, to = "sRGB",
scale.in = NULL, scale.out = 255)))
stopifnot(cc == cols)
# }
Run the code above in your browser using DataLab