为什么将 LinearGradientBrush.WrapMode 设置为 Clamp 会因 ArgumentException ("parameter is not valid") 而失败?
Why does setting LinearGradientBrush.WrapMode to Clamp fail with ArgumentException ("parameter is not valid")?
这是一个例子:
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 输出中 window 这表明:
A first chance exception of type 'System.ArgumentException' occurred in System.Drawing.dll
Additional information: Parameter is not valid.
(图片http://i.imgur.com/nM2oNm1.png)
这是在 Windows 7.
确认 LinearGradientBrush.WrapMode 接受 WrapMode
"获取或设置一个 WrapMode 枚举,它指示此的环绕模式
线性渐变画笔。
还有这个
https://msdn.microsoft.com/en-us/library/vstudio/system.drawing.drawing2d.wrapmode(v=vs.90).aspx
确认WrapMode.Clamp对梯度有效:
"Clamp The texture or gradient is not tiled."
我可以在 Windows 8.1.
上用 VS2015 确认这一点
这对我来说像是一个错误,因为 Clamp
即直到继续,最后一种颜色可能会非常有用。
您可以尝试使用 InterpolationColors
解决方法,但这需要对要填充的尺寸有一些了解..
有关使用 InterpolationColors
的代码示例,请参阅 and espcially
更新: Lars 的想法看起来也很有趣:用 LinearGradientBrush
创建一个 tile 然后用 TextureBrush
..
对我来说,使用 SetInterpolationColors
(C++) 缩放矢量并重复结束颜色效果很好。我在两端留下 10 * VectorSize 的 space 并标准化停止点。
这是一个例子:
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 输出中 window 这表明:
A first chance exception of type 'System.ArgumentException' occurred in System.Drawing.dll Additional information: Parameter is not valid.
(图片http://i.imgur.com/nM2oNm1.png)
这是在 Windows 7.
确认 LinearGradientBrush.WrapMode 接受 WrapMode
"获取或设置一个 WrapMode 枚举,它指示此的环绕模式 线性渐变画笔。
还有这个 https://msdn.microsoft.com/en-us/library/vstudio/system.drawing.drawing2d.wrapmode(v=vs.90).aspx
确认WrapMode.Clamp对梯度有效:
"Clamp The texture or gradient is not tiled."
我可以在 Windows 8.1.
上用 VS2015 确认这一点这对我来说像是一个错误,因为 Clamp
即直到继续,最后一种颜色可能会非常有用。
您可以尝试使用 InterpolationColors
解决方法,但这需要对要填充的尺寸有一些了解..
有关使用 InterpolationColors
更新: Lars 的想法看起来也很有趣:用 LinearGradientBrush
创建一个 tile 然后用 TextureBrush
..
对我来说,使用 SetInterpolationColors
(C++) 缩放矢量并重复结束颜色效果很好。我在两端留下 10 * VectorSize 的 space 并标准化停止点。