使用线性变换来变换颜色

使用线性变换来变换颜色

我想根据 rgb 颜色向量上的一些线性运算(或者如果更方便的话,以任何其他格式表示)转换特定块的所有颜色。转换将类似于 C' = A * C,其中 C 是原始颜色(3 向量 (r,g,b)),C' 是新颜色 (r',g',b'),A 是描述转换的 3x3 矩阵。

xcolor软件包有一些命令可用于转换块中使用的所有颜色,这很接近我想要的。但是,对于我的情况来说,转换功能太有限了。有一个命令可以\selectcolormodel{gray}将所有颜色转换为灰度,还有一个\maskcolors[<num model>]{<color>}命令仅允许按某些常数缩放组件。

以下在 MWE 中显示了这些方法:

\documentclass{article}

\usepackage{xcolor}

\begin{document}

\colorbox{red}{red} \colorbox{blue}{blue} \colorbox{green}{green}

{\selectcolormodel{gray}
    \colorbox{red}{red} \colorbox{blue}{blue} \colorbox{green}{green}
}

{\maskcolors[cmyk]{magenta}
    \colorbox{red}{red} \colorbox{blue}{blue} \colorbox{green}{green}
}

\end{document}

我对如何实现期望的结果有一些想法:

  • 定义一个颜色模型,如果我使用,它可以完成我所描述的操作\selectcolormodel{mymodel}。这可能是可行的,但可能非常复杂。
  • 重新定义\color命令以按我想要的方式更改颜色。这可能不够通用,但可能更容易实现。

在深入研究如何实现这些选项之前,我想检查是否有我忽略的更简单的解决方案。

相关内容