2015-10-19 117 views
4

下面是一个例子:为什么将LinearGradientBrush.WrapMode设置为Clamp失败并显示ArgumentException(“参数无效”)?

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.ArgumentException' 的第一次机会异常发生在System.Drawing.dll程序 其他信息:参数无效。

(PIC 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有效期为梯度:

“夹住纹理或梯度不平铺”。

+0

我可以在W8.1上用VS15确认这一点。这看起来像一个错误,因为'Clamp'即不带色的延续,可能是最后一种颜色会非常有用。您可以尝试使用'InterpolationColors'解决方案,但这需要您填写一些尺寸的知识。 – TaW

+0

谢谢。请输入您的答案作为答案,以便我可以接受。 – ChrisJJ

+1

这是一个奇怪的错误。您可以尝试创建LinearGradientBrush的位图切片,然后在TextureBrush中使用该位图,当WrapMode设置为钳位时不会引发错误。 – LarsTech

回答

1

我可以在Windows 8.1上用VS2015确认一下。

这对我来说看起来像一个bug,因为Clamp即直接延续,可能最后一种颜色会非常有用。

你可以尝试用InterpolationColors要解决,但需要的尺寸,以填补一些知识..

见代码示例here和espcially here使用InterpolationColors

更新:拉尔斯的想法看起来也非常有趣:与LinearGradientBrush创建一个瓷砖,然后用它与TextureBrush ..

相关问题