Я не уверен, как спросить об этом, но здесь.Найти наиболее читаемый цвет текста, который нарисован на цветной поверхности
Я рисую заполненный цветной прямоугольник на экране. Цвет находится в форме 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);
}
Это потрясающе, работает очень хорошо. Что действительно делает перевернутый последний бит? Как то, что означает и почему это работает? – Gautam
Забыл добавить, я использовал метод, который вы разместили, но затем превратил цвет в оттенки серого, и он отлично работает с точки зрения контраста. – Gautam
Другой способ выразить это для каждого элемента (cR + 128)% 256. Вы перемещаетесь на полпути цветовое пространство. Или, если c.R был <128, вы добавляете 128, значительно увеличивая яркость, а если c.R было> = 128, вы вычитаете 128, делая его заметно темнее. –