LinearGradientBrush的奇怪行为

时间:2011-03-16 14:07:08

标签: c# winforms system.drawing brush lineargradientbrush

我想用LinearGradientBrush填充一个Rectangle。有了一些矩形,我会得到一些奇怪的行为。例如:

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 );

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

Linear GradientBrush

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

使画笔高一个像素:

LinearGradientMode mode = LinearGradientMode.Vertical;
Rectangle BrushRect = rect;
BrushRect.Inflate(0, 1);
Brush brush = new LinearGradientBrush(BrushRect, Color.White, Color.Blue, mode);

答案 1 :(得分:2)

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