1

我想用 LinearGradientBrush 填充 Rectangle。使用一些 Rectangles 我会得到一些奇怪的行为。例子:

Rectangle rect = new Rectangle( 20, 20, 20, 34 );
LinearGradientMode mode = LinearGradientMode.Vertical;
Brush brush = new LinearGradientBrush( rect, Color.White, Color.Blue, mode );
e.Graphics.FillRectangle( brush, rect );

大多数矩形工作正常,但有些(如上面的)用第二种颜色(在本例中为蓝色)填充第一个像素行。见附图:

线性渐变画笔

有任何想法吗?

4

2 回答 2

3

使画笔高一像素:

LinearGradientMode mode = LinearGradientMode.Vertical;
Rectangle BrushRect = rect;
BrushRect.Inflate(0, 1);
Brush brush = new LinearGradientBrush(BrushRect, Color.White, Color.Blue, mode);
于 2011-03-16T14:24:44.360 回答
2

问题是 Fill() 的 MS 实现中的错误:当您认为您使用画笔并在某个点 (X,Y) 应用时,MS从另一侧工作:它们采用 Y 偏移量并计算画笔高度上除法的余数。该提醒在画笔内偏移以获取颜色。换句话说,您绘制的画布将使用绝对偏移量 0 的画笔“平铺”。因此,如果您在位置 Y=7 处绘制渐变,则渐变的颜色也会(从画笔)在偏移量 7(而不是 0)处获取!

于 2016-04-11T00:32:35.970 回答