색상의 RGB 값을 사용하여 대비 색상 결정

색상의 RGB 값을 사용하여 대비 색상 결정

저는 사용자 정의 비머 테마를 만들고 있으며 프레젠테이션에 사용되는 색상을 다음과 같이 설정하는 명령을 정의했습니다: \definecolor{primarycolor}{HTML}{9C27B0}(보라색 btw). 프레임의 배경색이 있다고
가정해 보겠습니다 .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 색상 정의에서만 작동하지만 쉽게 확장할 수 있다고 생각합니다.

도움이 되길 바랍니다

관련 정보