1

長方形を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 );

ほとんどの長方形は問題なく機能しますが、一部(上記のような)は最初のピクセル行を2番目の色(この場合は青)で塗りつぶします。添付の画像を参照してください。

線形グラデーションブラシ

何か案は?

4

2 に答える 2

3

ブラシを 1 ピクセル高くします。

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 でグラデーションをペイントすると、グラデーションの色も (0 ではなく) オフセット 7 で (ブラシから) 取得されます!

于 2016-04-11T00:32:35.970 に答える