1. ホーム

[解決済み】背景色からフォントカラーを決定する方法

2022-04-01 20:11:15

質問

あるセクションの背景色はカスタマイズできるが、フォントカラーはカスタマイズできないシステム(ウェブサイトなど)の場合(オプションの数を最小限に抑えるため)、フォントカラーが必要かどうかをプログラム的に判断する方法はありますか?

何かアルゴリズムがあるのでしょうが、色や明度など、自分で計算できるほどの知識はありません。

どのように解決するのですか?

私も同じような問題に遭遇しました。カラースケールやヒートマップ上のテキストラベルを表示するために、対照的なフォントカラーを選択する良い方法を見つけなければならなかったのです。つまり、単純に補色を生成するのは良い解決策ではなく、時には奇妙で非常に強い色が生成され、見るのも読むのも困難でした。

この問題を解決するために何時間もテストした結果、quot;dark"の色には白いフォント、quot;bright"の色には黒いフォントを選択することが最善の解決策であることが判明しました。

以下は、私がC#で使っている関数の例です。

Color ContrastColor(Color color)
{
    int d = 0;
    
    // Counting the perceptive luminance - human eye favors green color...      
    double luminance = (0.299 * color.R + 0.587 * color.G + 0.114 * color.B)/255;
    
    if (luminance > 0.5)
       d = 0; // bright colors - black font
    else
       d = 255; // dark colors - white font
                
    return  Color.FromArgb(d, d, d);
}

これは、多くの様々なカラースケール(レインボー、グレースケール、ヒート、アイス、その他多数)に対してテストされ、私が見つけた唯一の"ユニバーサル"メソッドである。

編集

カウントの計算式を変更しました。 a をquot;知覚的輝度(perceptive luminance")に変更すると、本当に良くなりました。すでに私のソフトウェアに実装しました。

編集2 WebSeedがこのアルゴリズムの素晴らしい実用例を提供してくれました。 http://codepen.io/WebSeed/full/pvgqEq/