使用颜色的 RGB 值来确定对比色

使用颜色的 RGB 值来确定对比色

我正在创建一个自定义的 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 颜色定义,但我认为它可以轻松扩展。

希望有所帮助

相关内容