【问题标题】:Why does setting LinearGradientBrush.WrapMode to Clamp fail with ArgumentException ("parameter is not valid")?为什么将 LinearGradientBrush.WrapMode 设置为 Clamp 失败并出现 ArgumentException(“参数无效”)?
【发布时间】:2016-01-18 10:46:39
【问题描述】:

这是一个例子:

public MainForm()
    {
        InitializeComponent();

          LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0,0,100,100),Color.Blue, Color.White,angle:0);
          brush.WrapMode = WrapMode.Tile; // OK
          brush.WrapMode = WrapMode.Clamp; // Causes Unhandled exception alert, offering break
    }

在 VS2008 输出窗口中显示:

System.Drawing.dll 中出现了“System.ArgumentException”类型的第一次机会异常 附加信息:参数无效。

(图片http://i.imgur.com/nM2oNm1.png

这是在 Windows 7 上。

文档在这里 https://msdn.microsoft.com/en-us/library/vstudio/system.drawing.drawing2d.lineargradientbrush.wrapmode(v=vs.90).aspx

确认 LinearGradientBrush.WrapMode 接受 WrapMode

"获取或设置一个 WrapMode 枚举,该枚举指示此对象的换行模式 线性渐变画笔。”

还有这个 https://msdn.microsoft.com/en-us/library/vstudio/system.drawing.drawing2d.wrapmode(v=vs.90).aspx

确认 WrapMode.Clamp 对渐变有效:

“Clamp 纹理或渐变不平铺。”

【问题讨论】:

  • 我可以在 W8.1 上使用 VS15 确认这一点。这看起来像一个错误,因为Clamp 即直到继续,可能最后一种颜色会非常有用。您可以尝试使用InterpolationColors 解决问题,但这需要对要填充的尺寸有所了解..
  • 谢谢。请输入您的回复作为答案,以便我接受。
  • 这是一个奇怪的错误。您可以尝试创建 LinearGradientBrush 的位图图块,然后在 TextureBrush 中使用该位图,当 WrapMode 设置为 Clamp 时不会引发错误。

标签: c# winforms windows-7


【解决方案1】:

我可以在 Windows 8.1 上使用 VS2015 确认这一点。

这对我来说似乎是一个错误,因为 Clamp 即直到继续,可能最后一种颜色会非常有用。

您可以尝试使用InterpolationColors 解决问题,但这需要对要填充的尺寸有所了解..

请参阅here,尤其是here,了解使用InterpolationColors 的代码示例

更新: Lars 的想法看起来也很有趣:用LinearGradientBrush 创建一个磁贴,然后用TextureBrush 使用它..

【讨论】:

    【解决方案2】:

    对我来说,使用SetInterpolationColors (C++) 缩放矢量并重复结束颜色效果很好。我在两端留了一个 10 * VectorSize 的空间,并对停靠点进行归一化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 2012-05-01
      • 1970-01-01
      • 2017-11-01
      • 2016-03-22
      • 1970-01-01
      相关资源
      最近更新 更多