【问题标题】:LinearGradientBrush does not render correctlyLinearGradientBrush 无法正确渲染
【发布时间】:2015-03-10 03:57:35
【问题描述】:

考虑以下来自标准 System.Windows.Forms.Form 的代码

protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);
    Rectangle test = new Rectangle(50, 50, 100, 100);
    using (LinearGradientBrush brush = new LinearGradientBrush(test, Color.Red, Color.Blue, 0f))
    {
        e.Graphics.DrawRectangle(new Pen(brush, 8), test);
    }
}

它产生这个结果:

为什么红线和蓝线显示的顺序不正确,如何解决?

【问题讨论】:

    标签: c# winforms gdi+ gdi


    【解决方案1】:

    渲染原点是问题所在。您要求一个 8px 宽的 Pen,并且该 8px 定义为从矩形定义的线的两个方向向外 4px。这是由于Alignment=Center 的默认值。如果将Pen设置为Alignment=Inset,效果会更好。

    您只需将其添加到您的原始代码中即可看到这一行:

    e.Graphics.DrawRectangle(Pens.White, test);
    

    把你的方法改成这样,就可以了:

    Rectangle test = new Rectangle(50, 50, 100, 100);
    using (LinearGradientBrush brush = new LinearGradientBrush(test, Color.Red, Color.Blue, 0f))
    {
        using (var pen = new Pen(brush, 8f))
        {
            pen.Alignment = PenAlignment.Inset;
            e.Graphics.DrawRectangle(pen, test);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-07-21
      • 2020-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-24
      相关资源
      最近更新 更多