使用顏色的 RGB 值來確定對比色

使用顏色的 RGB 值來確定對比色

我正在創建一個自訂投影機主題,並定義了一個命令來設定簡報中使用的顏色,如下所示:(\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 顏色定義,但我認為這可以輕鬆擴展。

希望有幫助

相關內容