Как нарисовать точный градиент с LinearGradientBrush в C #? - PullRequest
0 голосов
/ 13 сентября 2009

Я рисую этот объект в C #, используя GDI, и мне нужно иметь точное рисование пикселей. Тем не менее, это не работает ... Я не знаю, имеет ли это значение, но объект, который я рисую, является ToolStrip, я делаю пользовательский рендер ToolStrip.

Я нарисовал горизонтальную синюю линию в y-пикселе 1, чем желтую в y-пикселе 2, чем красную в y-пикселе 3. Это не настоящие цвета, я просто лучше вижу.

Как это:

Color cTop1 = Color.FromArgb(255, Color.Blue);
Color cTop2 = Color.FromArgb(255, Color.Yellow);
Color cTop3 = Color.FromArgb(255, Color.Red);

g.DrawLine(new Pen(cTop1), 0, 1, aBounds.Width, 1);
g.DrawLine(new Pen(cTop2), 0, 2, aBounds.Width, 2);
g.DrawLine(new Pen(cTop3), 0, 3, aBounds.Width, 3);

Чем, в точке y-пикселя 4 я начал заполнять прямоугольник с помощью LinearGradientBrush следующим образом:

Rectangle rTop = new Rectangle(0, 3, aBounds.Width, (aBounds.Height / 2) - 4);

Color cTop = Color.FromArgb(245, Color.White);
Color cBottom = Color.FromArgb(222, Color.White);

LinearGradientBrush tGradient = new LinearGradientBrush(rTop, cTop, cBottom, LinearGradientMode.Vertical);
g.FillRectangle(tGradient, rTop);

Проблема в том, что градиент закрашивается выше красной линии. Синий и желтый в порядке, но красная линия, которая должна быть RGB = 255,0,0, на самом деле это RGB = 255,111,111.

Я не могу понять, почему ... Я играл в SmoothingMode, InterpolationMode, CompositionMode, CompositionQuality, но я просто не могу сделать это правильно ...

Есть идеи?

1 Ответ

0 голосов
/ 13 сентября 2009

Возможно, кисть обернута, и вы видите, что опозирует "кровоточащий" цвет.

Попробуйте установить режим обтекания на

brush.WrapMode = Drawing2D.WrapMode.TileFlipXY
...