4

どのように尋ねたらよいかわかりませんが、ここに行きます。

画面上に塗りつぶされた色付きの長方形を描きます。色はR、G、Bの形式です

次に、長方形の上にテキストを描画したいのですが、テキストの色は、最高のコントラストを提供する、つまり読みやすいものでなければなりません。

例:

黒い長方形を描くと、テキストの明らかな色は白になります。

今試したのはこれです。この関数に四角形の色を渡すと、テキストに使用する反転色が返されます。

それは機能しますが、最善の方法ではありません。

助言がありますか?

// eg. usage: Color textColor = GetInverseLuminance(rectColor);
private Color GetInverseLuminance(Color color)
{
    int greyscale = (int)(255 - ((color.R * 0.30f) + (color.G * 0.59f) + (color.B * 0.11f)));

    return Color.FromArgb(greyscale, greyscale, greyscale);
}
4

6 に答える 6

3

大幅に異なる色を与えることが保証されている1つの簡単なアプローチは、RGBトリプルの各コンポーネントのトップビットを切り替えることです。

Color inverse(Color c)
{
    return new Color(c.R ^ 0x80, c.G ^ 0x80, c.B ^ 0x80);
}

元の色が#1AF283の場合、「逆」は#9A7203になります。

コントラストが重要になります。私は美学について保証しません。

更新、2009/4/3:私はこれと他のスキームで実験しました。私のブログでの結果。

于 2009-03-14T17:34:59.257 に答える
2

色に関するいくつかのヒント、特にテキストなどの前景と背景の並置に関するヒント。

人間の目は本質的に単純なレンズであるため、一度に1つの色にしか効果的に焦点を合わせることができません。最近のほとんどのカメラで使用されているレンズは、屈折率の異なる複数のレンズ(クロマチックレンズ)を使用してこの問題を回避し、すべての色に一度に焦点を合わせますが、人間の目はそれほど高度ではありません。

そのため、ユーザーは一度に1つの色だけに焦点を合わせてテキストを読む必要があります。これは、前景または背景のいずれかがカラーであるか、両方ではないことを意味します。 これは、通常、振動と呼ばれる状態につながります。この状態では、目が前景色と背景色の間で焦点を急速にシフトし、形状を解決しようとしますが、解決されず、形状に焦点が合わず、眼精疲労につながります。

于 2009-03-14T16:03:38.650 に答える
2

RGB(127,127,127)を指定すると、まったく同じ色が返されるため、関数は機能しません。(関数を変更して黒または白を返すようにすると、状況が少し改善されます)

常に読みやすくするための最良の方法は、白いテキストの周りに黒を付けるか、またはその逆にすることです。

多くの場合、最初に(x-1、y-1)、(x + 1、y-1)、(x + 1、y-1)、(x + 1、x + 1)、および次に、(x、y)の白いテキスト。

または、最初に半透明の黒いブロックを描画し、次にその上に不透明な白いテキストを描画することもできます。これにより、背景とテキストの間に常に一定のコントラストが確保されます。

于 2009-03-14T16:05:28.460 に答える
2

最も読みやすい色は、白または黒になります。最も「落ち着く」色は、白でも黒でもないものであり、背景色とわずかに対照的な色になります。これは主観的なものであるため、プログラムでこれを行う方法はありません。見方が人によって異なるため、誰にとっても最も読みやすい色を見つけることはできません。

于 2009-03-14T15:28:27.237 に答える
1

なぜ灰色?黒か白のどちらかが最適です。暗い色は白、明るい色は黒。輝度がしきい値を超えているかどうかを確認し、どちらかを選択してください

(ちなみに、.net、c#、またはasp.netタグは必要ありません)

于 2009-03-14T15:22:17.017 に答える
1

あなたはいくつかの色彩理論を研究する必要があります。「ColorWheelPro」と呼ばれるプログラムは、遊ぶのが楽しく、一般的なアイデアを提供します。

基本的に、特定の色の補色を探しています。

そうは言っても、色彩理論は役に立ちますが、微調整するには人間の目が必要であることがわかると思います。

于 2009-03-14T15:28:32.853 に答える