make.rgb
位于 grDevices
包(package)。 说明
这些函数指定在 convertColor
中使用的颜色空间。
用法
make.rgb(red, green, blue, name = NULL, white = "D65",
gamma = 2.2)
colorConverter(toXYZ, fromXYZ, name, white = NULL, vectorized = FALSE)
参数
red,green,blue |
RGB 原色的色度(xy 或 xyY) |
name |
色彩空间的名称 |
white |
指定参考白色的字符串(请参阅“详细信息”。) |
gamma |
显示伽玛(非线性)。正数或字符串 |
fromXYZ |
从 XYZ 三刺激坐标转换到该空间的函数 |
toXYZ |
从此空间转换为 XYZ 三刺激坐标的函数。 |
vectorized |
|
细节
RGB 颜色空间由红、绿、蓝三原色的色度定义。这些以 xyY 坐标中长度为 2 或 3 的向量给出(不使用 Y 分量,可以省略)。色度是相对于参考白色定义的,参考白色必须是 CIE 标准光源之一:"A"、"B"、"C"、"D50"、"D55"、"D60"、"E"(通常为 "D65")。
显示伽玛最常见的是 2.2,尽管 Apple RGB 使用 1.8。 sRGB 标准指定了一个更复杂的函数,接近 2.2 的 gamma; gamma = "sRGB"
使用此函数。
除了 RGB 之外的色彩空间可以通过 XYZ 三色坐标的转换来直接指定。这些函数应该有两个参数。第一个是给出一种颜色坐标的向量。第二个参数是参考白色。如果颜色空间的定义中包含特定的参考白色(对于 RGB 空间),则应忽略第二个参数,并且可能是 ...
。
从 R 3.6.0 开始,内置颜色转换器与 convertColor
一起被矢量化,以便在一次调用中处理三列颜色矩阵,而不是通过 apply
逐行处理。为了保持向后兼容性,colorConverter
将 fromXYZ
和 toXYZ
包装在 apply
循环中,以防它们也不支持矩阵输入。如果您使用的 fromXYZ
和 toXYZ
函数一次在整个颜色矩阵上正确运行,而不是逐行运行,则可以设置 vectorized=TRUE
以提高性能。
值
colorConverter
类的对象
例子
(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)
## Internally vectorized version of hexcolor, notice the use
## of `vectorized = TRUE`:
hexcolorv <- 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)
oob <- pmin(rgb[,1],rgb[,2],rgb[,3]) < 0 |
pmax(rgb[,1],rgb[,2],rgb[,3]) > 0
res <- rep(NA_character_, nrow(rgb))
res[!oob] <- rgb(rgb[!oob,,drop=FALSE])},
white = "D65", name = "#rrggbb",
vectorized=TRUE)
(ccv <- round(convertColor(as.matrix(hex), from = hexcolor, to = "sRGB",
scale.in = NULL, scale.out = 255)))
stopifnot(ccv == cols)
参考
Conversion algorithms from http://www.brucelindbloom.com.
也可以看看
相关用法
- R msgWindow 操纵窗口
- R axisTicks 计算漂亮的轴刻度
- R hcl HCL 颜色规格
- R quartzFonts 石英字体
- R as.graphicsAnnot 强制图形注释对象
- R xyTable (x,y) 点的重数,例如,对于向日葵图
- R dev.interactive 当前图形设备是否具有交互性?
- R chull 计算一组点的凸包
- R convertColor 在色彩空间之间转换
- R X11Fonts X11 字体
- R plotmath R 中的数学注释
- R dev.capture 将设备输出捕获为光栅图像
- R dev.size 查找设备表面的尺寸
- R pdf.options 设置/查看 pdf 参数默认值的辅助函数
- R densCols 平滑密度图的颜色
- R windows Windows 图形设备
- R rgb RGB 颜色规格
- R check.options 设置带有一致性检查的选项
- R dev.flush 保持或刷新屏幕图形设备上的输出
- R n2mfrow 根据绘图数计算默认“mfrow”
- R dev 控制多个设备
- R hsv HSV 颜色规格
- R postscript PostScript 图形
- R pdf PDF图形设备
- R xyz.coords 提取绘图结构
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Create colour spaces。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。