Estoy creando un tema de proyector personalizado y definí un comando para configurar los colores utilizados en la presentación de esta manera: \definecolor{primarycolor}{HTML}{9C27B0}
(púrpura por cierto).
Digamos primarycolor
que es mi color de fondo de un marco.
Ahora, quiero poder calcular el brillo/luminancia de un color determinado para determinar un color adecuado para el texto (ya sea blanco o negro). En el caso del morado, el blanco sería un color de texto legible.
Yo lo haría así (pseudocódigo):
luminance := 0.2126 * Red + 0.7152 * Green + 0.0722 * Blue
textcolor := luminance < 128 ? black : white
¿Cómo obtengo los valores RGB de un color y luego determino el "color de contraste" (blanco o negro)?
Respuesta1
Aquí está mi solución para determinar la luminosidad de un color y luego decidir un color de contraste (no está limpio pero 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}
}
Respuesta2
Solo necesitaba una característica similar. Esta solución requierePGF
\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%
}%
Puedes llamar con:
\setcolor{my-background-color}{my-foreground-color}{377EB8}
Sólo funciona con la definición de color HTML, pero creo que se puede ampliar fácilmente.
Espero que ayude