如何在C#中使用LinearGradientBrush绘制精确的渐变?

时间:2009-09-13 01:49:11

标签: c# gdi+ smoothing lineargradientbrush

我正在使用GDI在C#中绘制这个对象,我需要精确的像素绘制。但是,这不起作用......我不知道它是否重要,但我正在绘制的对象是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 :(得分:0)

刷子可能被包裹,你所看到的是相反的颜色“流血”。

尝试将wrapmode设置为

brush.WrapMode = Drawing2D.WrapMode.TileFlipXY