我想用线性画笔填充矩形。用一些矩形我得到一些奇怪的行为。范例:
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条答案
按热度按时间new9mtju1#
使画笔高出一个像素:
cbeh67ev2#
问题是Fill()的MS实现中的bug:当你认为你拿着刷子在某个点(X,Y)上涂抹时,MS从相反的一侧起作用:他们采取Y偏移和计数余数从划分刷高度。这个提醒在画笔中偏移以获取颜色。换句话说,你绘制的画布变成了“平铺”的,你的画笔的绝对偏移量为0。因此,如果你在Y=7的位置绘制渐变,渐变的颜色也会在偏移量7(而不是0)处(从画笔)获取!