如何从颜色中获取色调、饱和度和亮度值?

如何从颜色中获取色调、饱和度和亮度值?

我想myorange通过更改hue先前给定的颜色 ( ) 的值来定义新颜色 ( ) oldcolour,从而保持其原始饱和度和亮度。 有办法吗?

我能想到两种策略。首先,有一个函数\changehue从另一个函数返回一种颜色,但色调由用户定义。它的用法如下:

\colorlet{myorange}{\changehue{oldcolour}{30}}

或者可能:

\colorlet{myorange}{\changehue{oldcolour}{orange}}

在最后一种情况下,\changehue将提取色调orange并将其插入代码中。这种方式对我来说更好。

definecolor在第二种策略中,我们只是用颜色模型来定义颜色,hsb借助函数来提取先前给定颜色的色调、饱和度和亮度。

\definecolor{myorange}{hsb}{\hue{orange}, \saturation{oldcolour}, \brightness{oldcolour}}

我强烈倾向于第二种策略,这也是我的问题所预设的方式。知道是否存在或可以定义诸如\hue\saturation和 之类的命令会很有用。\brightness

在此先感谢您的帮助。

答案1

这可能是部分答案。您可以定义颜色系列并改变色调值。也许更重要的信息是允许\extractcolorspecs您提取给定颜色的颜色规范。这可以用 转换为给定的配色方案\convertcolorspec。最后两个命令已合并到命令\convertdirectly,我在这里回收它。

\documentclass{article}
\usepackage{xcolor}
% from https://tex.stackexchange.com/a/283618
\newcommand{\convertdirectly}[3][hsb]{\begingroup%
  \extractcolorspecs{#2}{\modelcmd}{\colorcmd}%
  \convertcolorspec{\modelcmd}{\colorcmd}{#1}{\tmp}%
  \message{#2 in #1 is \tmp^^J}%
  \aftergroupdef#3\tmp}
\def\First#1,#2,#3{#1}
\def\Second#1,#2,#3{#2}
\def\Third#1,#2,#3{#3}
\newcommand{\hue}[1]{\convertdirectly{#1}{\tmp}%
\expandafter\First\tmp}
\newcommand{\Hue}[2]{\begingroup\convertdirectly{#1}{\tmp}%
\edef\res{\expandafter\First\tmp}%
\aftergroupdef#2\res}
\newcommand{\saturation}[1]{\convertdirectly{#1}{\tmp}%
\expandafter\Second\tmp}
\newcommand{\Saturation}[2]{\begingroup\convertdirectly{#1}{\tmp}%
\edef\res{\expandafter\Second\tmp}%
\aftergroupdef#2\res}
\newcommand{\brightness}[1]{\convertdirectly{#1}{\tmp}%
\expandafter\Third\tmp}
\newcommand{\Brightness}[2]{\begingroup\convertdirectly{#1}{\tmp}%
\edef\res{\expandafter\Third\tmp}%
\aftergroupdef#2\res}
\newcounter{myc}
\begin{document}
\definecolorseries{changehue}{hsb}{step}{orange}{0,0.1,0}
\resetcolorseries[12]{changehue}%
\loop\stepcounter{myc}\colorlet{mycolor}{changehue!![\number\value{myc}]}%
\extractcolorspecs{mycolor}{\modelcmd}{\colorcmd}%
model=\textcolor{mycolor}{\modelcmd},%
color=\textcolor{mycolor}{\colorcmd}\par\ifnum\value{myc}<11\repeat


the hsb ``code'' of orange is \convertdirectly{orange}{\hsborange}\hsborange

the hsb ``code'' of brown is \convertdirectly{brown}{\hsbbrown}\hsbbrown

hue of orange=\hue{orange}

saturation of orange=\saturation{orange}

brightness of orange=\brightness{orange}

\Hue{orange}{\myhue}\Saturation{blue}{\mysaturation}\Brightness{brown}\mybrightness

\definecolor{myorange}{hsb}{\myhue,\mysaturation,\mybrightness}

\textcolor{myorange}{Test}
\end{document}

在此处输入图片描述

相关内容