线性渐变画刷无法正确呈现

7
考虑以下来自标准 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);
    }
}

它产生了这个结果: enter image description here 为什么红色和蓝色的线显示顺序不正确,如何解决?
1个回答

2
渲染起点是问题所在。您正在请求一个8像素宽的钢笔,而这8像素定义为从矩形线向外4像素的两个方向。这是由于默认值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);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接