Ich erstelle ein benutzerdefiniertes Beamer-Design und habe einen Befehl definiert, um die in der Präsentation verwendeten Farben wie folgt festzulegen: \definecolor{primarycolor}{HTML}{9C27B0}
(übrigens lila).
Nehmen wir an, primarycolor
das ist meine Hintergrundfarbe eines Rahmens.
Nun möchte ich die Helligkeit/Leuchtdichte einer bestimmten Farbe berechnen können, um eine passende Farbe für den Text zu bestimmen (entweder Schwarz oder Weiß). Im Fall von Lila wäre Weiß eine lesbare Textfarbe.
Ich würde es so machen (Pseudocode):
luminance := 0.2126 * Red + 0.7152 * Green + 0.0722 * Blue
textcolor := luminance < 128 ? black : white
Wie erhalte ich die RGB-Werte einer Farbe und bestimme anschließend die „Kontrastfarbe“ (Schwarz oder Weiß)?
Antwort1
Hier ist meine Lösung, um die Leuchtkraft einer Farbe zu bestimmen und mich dann für eine Kontrastfarbe zu entscheiden (es ist nicht sauber, aber es funktioniert):
\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}
}
Antwort2
Ich brauchte nur eine ähnliche Funktion. Diese Lösung erfordertPGF
\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%
}%
Sie können anrufen mit:
\setcolor{my-background-color}{my-foreground-color}{377EB8}
Es funktioniert nur mit HTML-Farbdefinitionen, aber ich denke, dies kann leicht erweitert werden.
Hoffe, dass hilft