Verwenden Sie RGB-Farbwerte, um eine Kontrastfarbe zu bestimmen

Verwenden Sie RGB-Farbwerte, um eine Kontrastfarbe zu bestimmen

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, primarycolordas 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

verwandte Informationen