2011-03-16 39 views
1

我想用LinearGradientBrush填充Rectangle。随着一些矩形我得到一些奇怪的行为。例如:LinearGradientBrush的怪异行为

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

任何想法?

+0

以后,更好的答案在这里发布http://stackoverflow.com/questions/8015656/gdi-net-lineargradientbrush-wider-than-202-pixels-causes-color-wrap-around – Jake 2012-08-20 12:46:01

回答

2

使画笔一个像素高:

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

好主意。这解决了它。但是你知道它为什么会发生吗? – EricSchaefer 2011-03-16 14:59:28

+3

这是有效的。在GDI +中,一个错误是一个祸害 – 2011-03-16 14:59:47

2

问题是MS实施填充()的错误: 当你认为你拿画笔,在某些时候申请(X,Y),MS从对面作品:他们采取Y偏移和计数其余从画笔高度划分。该提醒会在画笔内部偏移以获取颜色。换句话说,你画的画布会用绝对偏移量为0的画笔“平铺”。所以,如果你在Y = 7的位置绘制渐变,渐变颜色也会从偏移量7(而不是0)处获得(从画笔)!