【问题标题】:GDI+ .NET: LinearGradientBrush wider than 202 pixels causes color wrap-aroundGDI+ .NET:LinearGradientBrush 宽度超过 202 像素会导致颜色环绕
【发布时间】:2011-11-04 20:59:16
【问题描述】:

如果我用LinearGradientBrush 绘制一个宽度超过 202 像素的矩形,我会在左侧看到一条彩色条纹:

给出 202px 宽矩形的代码:

private void MainForm_Paint(object sender, PaintEventArgs e)
{
   Rectangle r = new Rectangle(50, 50, 202, 50);

   Color color1 = Color.FromArgb(unchecked((int)0xFF00024d));
   Color color2 = Color.FromArgb(unchecked((int)0xFFd6a20f));

   Brush b = new LinearGradientBrush(r, color1, color2, LinearGradientMode.Horizontal);
   e.Graphics.FillRectangle(b, r);
}

我得到一个正确绘制的矩形:

但如果我将矩形更改为 203 像素宽:

Rectangle r = new Rectangle(50, 50, 203, 50);

矩形在左侧有一个彩色边缘或环绕:


它也发生在垂直方向LinearGradientMode.Vertical

202px

203px

【问题讨论】:

  • 这里也可以重现。看起来像一个错误。
  • ILSpy 只告诉我所有有趣的事情似乎都发生在 gdiplus.dll 中。
  • 这是为了提醒您接受您满意的答案。您对这个网站了如指掌,所以这可能漏掉了。

标签: .net winforms graphics gdi+


【解决方案1】:

在 FillRectangle() 调用之前添加此语句:

 e.Graphics.PixelOffsetMode = PixelOffsetMode.Half;

这避免了因浮点舍入误差而导致的非一问题。

【讨论】:

  • 这非常有效。根据文档(“指定像素在水平和垂直方向上偏移 -.5 个单位”),我担心像素可能会偏移 -.5 个单位。幸运的是PixelOffsetMode.Half 没有将像素偏移一半,并且一切都按原样呈现。
猜你喜欢
  • 2011-11-08
  • 2020-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多