为什么将LinearGradientBrush.WrapMode设置为Clamp会因ArgumentException失败(“参数无效”)?

时间:2015-10-19 23:06:09

标签: c# winforms windows-7

以下是一个例子:

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枚举,指示此包装模式 一个LinearGradientBrush“。

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

确认WrapMode.Clamp对渐变有效:

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

2 个答案:

答案 0 :(得分:3)

我可以在Windows 8.1上使用VS2015进行确认。

对我来说,这看起来像是一个错误,因为Clamp即未经加速的延续,可能最后一种颜色非常有用。

您可以尝试使用InterpolationColors进行解决,但这需要了解要填充的尺寸..

有关使用InterpolationColors的代码示例,请参阅here和特别here

更新:Lars的想法看起来也非常有趣:使用LinearGradientBrush创建一个平铺,然后将其与TextureBrush一起使用..

答案 1 :(得分:0)

对我来说,使用SetInterpolationColors(C ++)可以缩放向量并重复结束颜色,效果很好。我在两端留了10 * VectorSize的空间并标准化了挡块。

GridientClamp

enter image description here