2009-09-13 5 views
0

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

Я нарисовал горизонтальную синюю линию на 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); 

чем при у-пикселя 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, но я просто не могу сделать это правильно ...

Любые Ideias?

ответ

0

Вполне возможно, что кисть заворачивают и то, что вы seeying это на противоположном цвет «кровотечение» в.

Try и установите wrapmode в

brush.WrapMode = Drawing2D.WrapMode.TileFlipXY 
+0

Не работал, пробовал все другие и так далее :( –

+0

На самом деле, это действительно сработало, но у меня была эта строка «g.SmoothingMode = SmoothingMode.AntiAlias;» и ее нужно было удалить. –