1

私の現在のツールには、いくつかの数字が入った色付きのボックスがあります。ボックスの背景色は、ある種のリストによって定義されますが、ユーザーが変更することもできます。フォアカラー(==数字のフォントカラー)はできません。ユーザーが常に数字を読み取れるようにしたいので、バックカラーが変わるたびに数字のフォアカラーを調整したいと思います。

Atm私はこのようなコードを使用します:

if(Math.Abs(foreColor.GetBrightness() - backColor.GetBrightness()) <= 0.5f)
{
    if(foreColor.GetBrightness() > 0.5f)
    {
       foreColor = Color.Black;
    }
    else
    {
       foreColor = Color.White;
    }
}

ただし、これは問題の回避策にすぎません。色が非常に多く(ほとんどが黄色)、表示が読みにくくなります。誰かが同様の問題に触れて、良い解決策を見つけましたか?

4

3 に答える 3

1

各カラーコンポーネント(コンポーネントごとに[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;

これにより、基本的に、前景色が背景色の反対側の八分円にできるだけ配置されます。

于 2010-07-22T09:48:25.680 に答える
0

フォアカラーとして白黒のみを使用しながら、これを行う別の方法を次に示します。

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;
}

わずかな調整に注意してください。<=これにより、デフォルトのウィンドウカラーピッカーから取得する「クローズコール」の場合に、計算された色が白になります。

于 2010-08-25T10:02:09.333 に答える
0

これは完璧に機能します。

gray = ((backColor.R*38 + backColor.G*75 + backColor.B*15) >> 7);
foreColor = gray < 128 ? Color.White : Color.Black;
于 2014-10-19T17:45:48.983 に答える