2011-03-16 54 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)處獲得(從畫筆)!