C # удалить более темные цвета из KnownColor - PullRequest
4 голосов
/ 03 февраля 2011

Я получил список Knowncolor из системы, но я хочу удалить некоторые, которые слишком темные, и сделать персонажа переднего плана невидимым.Я попробовал следующий код, но KnownColor.Black все еще появляется.Есть ли способ заказать их по темноте?

if (knownColor > KnownColor.Transparent && knownColor < KnownColor.MidnightBlue && knownColor < KnownColor.Navy)
            {
                //add it to our list
                colors.Add(knownColor);
            }

Ответы [ 2 ]

7 голосов
/ 03 февраля 2011

Вы можете преобразовать известные цвета в экземпляр Color и затем сравнить яркость, используя метод GetBrightness():

Получает яркость оттенка-насыщенности-яркости (HSB)значение для этой цветовой структуры.Яркость варьируется от 0,0 до Blockquote 1.0, где 0,0 представляет черный цвет, а 1,0 - белый.

float brightness = Color.FromKnownColor(KnownColor.Transparent).GetBrightness();

Применительно к вашему примеру должно работать что-то вроде следующего (проверено на черный и желтый):

KnownColor knownColor = KnownColor.Yellow;

float transparentBrightness = Color.FromKnownColor(KnownColor.Transparent).GetBrightness();
float midnightBlueBrightness = Color.FromKnownColor(KnownColor.MidnightBlue).GetBrightness();
float navyBrightness = Color.FromKnownColor(KnownColor.Navy).GetBrightness();
float knownColorBrightness = Color.FromKnownColor(knownColor).GetBrightness();

if (knownColorBrightness  < transparentBrightness 
    && knownColorBrightness > midnightBlueBrightness 
    && knownColorBrightness > navyBrightness)
{
    //add it to our list
    colors.Add(knownColor);
}
3 голосов
/ 03 февраля 2011

Взгляните на мой ответ, касающийся определения цвета переднего плана - он включает вычисление воспринимаемой яркости цвета фона, чтобы решить, отображать ли белый или черный как передний план.Вы можете использовать тот же метод и просто отказаться от слишком темных цветов:

Сделать цвет переднего плана черным или белым в зависимости от фона

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...