【问题标题】:Weird behavior of LinearGradientBrushLinearGradientBrush 的奇怪行为
【发布时间】:2011-07-16 15:17:00
【问题描述】:

我想用 LinearGradientBrush 填充一个矩形。使用一些 Rectangles 我会得到一些奇怪的行为。示例:

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

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

有什么想法吗?

【问题讨论】:

标签: c# winforms system.drawing brush lineargradientbrush


【解决方案1】:

问题是 Fill() 的 MS 实现中的错误: 当您认为您在某个点 (X,Y) 使用画笔并应用时,MS 从相反的一侧工作:它们采用 Y 偏移量并计算画笔高度上的除法 remainder。该提醒在画笔内偏移以获取颜色。换句话说,您绘制的画布将使用绝对偏移量 0 的画笔“平铺”。因此,如果您在位置 Y=7 处绘制渐变,则渐变的颜色也会(从画笔)在偏移量 7(而不是 0)处获取!

【讨论】:

    【解决方案2】:

    使画笔高一个像素:

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

    【讨论】:

    • 好主意。这解决了它。但是你知道它为什么会发生吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 2015-07-20
    • 2010-10-03
    • 2021-07-12
    • 2013-10-04
    • 2019-01-23
    相关资源
    最近更新 更多