У меня случайный цветной фон, который разбит на сплошные цветные прямоугольники. Я хочу нарисовать сетку над прямоугольниками (это не проблема). Проблема в том, что из-за случайных цветов я не могу жестко закодировать цвет сетки, потому что он может не отображаться.
Еще один способ думать об этом - это построение сетки на графике поверхности f (x, y). Если цвет сетки совпадает с цветом функции (как он определен), он не будет виден.
Я хотел бы взять цвет фона и вычислить новый цвет (оттенки серого или аналогичный цвету фона), который контрастирует с цветом, чтобы его можно было легко увидеть (но не отвлекает, например, чистый белый на чистом черном) .
Я пытался использовать яркость и взвешенную яркость, но она не работает хорошо для всех цветов. Я также попробовал гамма-коррекцию цветов, но она также не работает.
Мне также хотелось бы, чтобы цвет сетки был как можно более равномерным (я мог бы вычислить смежные цвета сетки, чтобы смешать их). Это не так важно, но было бы неплохо иметь единообразие.
Код, с которым я работаю, основан на
//byte I = (byte)(0.2*R + 0.7*G + 0.1*B);
//byte I = (byte)(R + G + B)/3.0);
byte I = (byte)(Math.Max(Bar.Background.R, Math.Max(Bar.Background.G, Bar.Background.B)));
if (I < 120)
I = (byte)(I + 30);
else
I = (byte)(I - 30);
//I = (byte)(Math.Pow(I/255.0, 1/2.0)*255);
Я также попытался гамма-коррекцией в первую очередь RGB.
У кого-нибудь есть идеи?