我正在创建一个自定义的 beamer 主题,并定义了一个命令来设置演示文稿中使用的颜色,如下所示:(顺便说\definecolor{primarycolor}{HTML}{9C27B0}
一下,紫色)。
假设primarycolor
这是我的框架的背景颜色。
现在,我希望能够计算给定颜色的亮度/亮度,以确定适合文本的颜色(黑色或白色)。对于紫色,白色将是可读的文本颜色。
我会这样做(伪代码):
luminance := 0.2126 * Red + 0.7152 * Green + 0.0722 * Blue
textcolor := luminance < 128 ? black : white
如何获取颜色的 RGB 值,然后确定“对比色”(黑色或白色)?
答案1
这是我的解决方案,先确定颜色的亮度,然后再决定对比色(虽然不干净,但有效):
\RequirePackage{xcolor, etoolbox, xstring}
\definecolor{LightBlue}{HTML}{03A9F4}
\extractcolorspecs{grayScaleColor}{\modelspec}{\grayscale}
\StrBehind[1]{\grayscale}{0.}[\nbrstring]
\StrLeft{\nbrstring}{1}[\nbr]
\ifnumcomp{\nbr}{>}{5}{ % Brighter
\colorlet{primary-text-color}{black}
}{ % Less bright
\colorlet{primary-text-color}{white}
}
答案2
我只需要类似的功能。此解决方案需要PGF
\newcommand{\setcolor}[3]{%
\definecolor{#1}{HTML}{#3}%
\extractcolorspecs{#1}{\modelspec}{\grayscale}%
\pgfmathparse{(
array({\grayscale},0)*0.2126+
array({\grayscale},1)*0.7152+
array({\grayscale},2)*0.0722)>=0.5?int(1):int(0)}%
\ifnum\pgfmathresult>0%
\colorlet{#2}{black}%
\else%
\colorlet{#2}{white}%
\fi%
}%
您可以拨打以下电话:
\setcolor{my-background-color}{my-foreground-color}{377EB8}
它只适用于 HTML 颜色定义,但我认为它可以轻松扩展。
希望有所帮助