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