ランダムな背景のための読みやすい色を計算する方法?
-
26-09-2020 - |
質問
現在のツールでは、いくつかの番号が付いている色付きのボックスがあります。ボックスの背景はある種のリストで定義されていますが、ユーザーによって変更することもできます。ForeColor(== FontColor)はできません。
ATM私はこのようなコードを使う:
if(Math.Abs(foreColor.GetBrightness() - backColor.GetBrightness()) <= 0.5f)
{
if(foreColor.GetBrightness() > 0.5f)
{
foreColor = Color.Black;
}
else
{
foreColor = Color.White;
}
}
.
しかしそれは問題の回避策だけであるので、読み取りの読み取りに悪いことになる色(主に黄色い)があります。誰もが同様の問題に触れて良い解決策を見つけましたか?
解決
各色成分の場合(コンポーネントごとの[0,255]の範囲を想定)、128未満の場合は255に飽和します。それ以外の場合はゼロにしてください。
fg.r = bg.r < 128 ? 255 : 0;
fg.g = bg.g < 128 ? 255 : 0;
fg.b = bg.b < 128 ? 255 : 0;
.
これは本質的に前景色を背景色と反対側のオクタントに遠くに配置します。
他のヒント
これを行うもう1つの方法は、
として白黒のみを使用しています。foreColor = Color.Black;
int changeToWhite = 0;
if(backColor.R <= 128)
{
changeToWhite++;
}
if(backColor.G <= 128)
{
changeToWhite++;
}
if(backColor.B <= 128)
{
changeToWhite++;
}
if(changeToWhite > 1)
{
foreColor = Color.White;
}
.
わずかな調整に注意してください:<= これにより、デフォルトのWindowsカラーピッカーから取得された「Close Calls」の場合、計算された色がホワイトになります。
これは完璧に機能します。
gray = ((backColor.R*38 + backColor.G*75 + backColor.B*15) >> 7);
foreColor = gray < 128 ? Color.White : Color.Black;
. 所属していません StackOverflow