2015-10-19 44 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 ..

相關問題