色の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 の色定義でのみ機能しますが、簡単に拡張できると思います。

お役に立てれば幸いです

関連情報