Estou criando um tema de projetor personalizado e defini um comando para definir as cores usadas na apresentação assim: \definecolor{primarycolor}{HTML}{9C27B0}
(roxo, aliás).
Digamos primarycolor
que seja a cor de fundo de um quadro.
Agora, quero poder calcular o brilho/luminância de uma determinada cor para determinar uma cor adequada para o texto (preto ou branco). No caso do roxo, o branco seria uma cor de texto legível.
Eu faria assim (pseudocódigo):
luminance := 0.2126 * Red + 0.7152 * Green + 0.0722 * Blue
textcolor := luminance < 128 ? black : white
Como obtenho os valores RGB de uma cor e depois determino a "cor de contraste" (preto ou branco)?
Responder1
Aqui está minha solução para determinar a luminosidade de uma cor e depois decidir sobre uma cor de contraste (não é limpa, mas funciona):
\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}
}
Responder2
Eu só precisava de um recurso semelhante. Esta solução requerPGF
\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%
}%
Você pode ligar com:
\setcolor{my-background-color}{my-foreground-color}{377EB8}
Funciona apenas com definição de cores HTML, mas acho que isso pode ser facilmente estendido.
Espero que ajude