winforms LinearExclusive Brush的奇怪行为

7gcisfzg  于 2023-10-23  发布在  其他
关注(0)|答案(2)|浏览(97)

我想用线性画笔填充矩形。用一些矩形我得到一些奇怪的行为。范例:

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

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

有什么想法吗?

new9mtju

new9mtju1#

使画笔高出一个像素:

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

cbeh67ev2#

问题是Fill()的MS实现中的bug:当你认为你拿着刷子在某个点(X,Y)上涂抹时,MS从相反的一侧起作用:他们采取Y偏移和计数余数从划分刷高度。这个提醒在画笔中偏移以获取颜色。换句话说,你绘制的画布变成了“平铺”的,你的画笔的绝对偏移量为0。因此,如果你在Y=7的位置绘制渐变,渐变的颜色也会在偏移量7(而不是0)处(从画笔)获取!

相关问题