2014-11-06 309 views
-1

我正在使用以下代碼,其中使用線性漸變畫筆繪製矩形。但是,我無法理解畫筆構造函數的前兩個參數是如何工作的。我搜索了所有我發現的是,這些應該是刷子的開始和結束點。但是,畫筆本身如何具有起點和終點呢?LinearGradientBrush構造函數參數

using System.Drawing.Drawing2D; 

LinearGradientBrush lgb = new LinearGradientBrush(
    new Point(0, 0), new Point(40, 40), Color.Red, Color.DarkBlue); 
Graphics g = panel1.CreateGraphics(); 
g.FillRectangle(lgb, 20, 20, 80, 80); 

我特別喜歡它,如果有人能告訴我,如果我改變了構造函數變量如下會有什麼區別:

LinearGradientBrush lgb = new LinearGradientBrush(
    new Point(20, 20), new Point(60, 60), Color.Red, Color.DarkBlue); 
+2

您是否閱讀過'LinearGradientBrush'的文檔?在構造函數的文檔中有什麼特別的地方是你理解有困難? – 2014-11-06 00:42:56

+1

你剛試過嗎?屏幕上的差異應該很明顯。 – BradleyDotNET 2014-11-06 00:50:37

+0

@DJKRAZE真的嗎?那又是如何重複的? – BradleyDotNET 2014-11-06 00:51:40

回答

0

一個LinearGradientBrush描繪的區域與線性漸變,換言之,沿着由起點和終點限定的線的顏色混合。畫筆的第一種顏色在起點處使用,並且顏色沿着線條平滑過渡,從而變成終點處的第二種顏色。因此,通過改變端點,您可以調整漸變的方向和發生顏色轉變的距離,甚至在距離比您要填充的區域更短時重複該距離。

您已經在您的問題中編寫了代碼,爲什麼不嘗試幾個實驗?我假設你的表格上有一個Panel,名字爲panel1,其大小至少爲150 x 150個單位。爲了方便起見,我們將您的代碼放入一個私有方法中,該方法接受漸變的起點和終點。爲了說明的目的,我們還將添加一些代碼來繪製一條黃色線條,其起點和終點與漸變的相同點。

private void DrawGradient(Point startPoint, Point endPoint) 
{ 
    LinearGradientBrush lgb = 
     new LinearGradientBrush(startPoint, endPoint, Color.Red, Color.DarkBlue); 
    Graphics g = panel1.CreateGraphics(); 
    g.FillRectangle(lgb, 0, 0, 80, 80); 
    g.DrawLine(new Pen(Color.Yellow, 1.5f), startPoint, endPoint); 
} 

現在我們可以方便地從某個地方調用此代碼,例如按鈕單擊處理程序,並將它傳遞給一些點。下面是如果我們通過(0,0)和結束(79,79)點的起點會發生什麼:

DrawGradient(new Point(0, 0), new Point(79, 79)); 

diagonal gradient top left to bottom right

注意如何從紅色在左上角的色彩過渡沿着黃線在右下方變成藍色。如果我們顛倒了終點呢?

DrawGradient(new Point(79, 79), new Point(0, 0)); 

diagonal gradient bottom right to top left

如所預期的,過渡現在去在相反的方向,與紅色在右下和藍色中的左上角。同樣,我們可以過渡使用端點水平線去左到右:

DrawGradient(new Point(0, 40), new Point(79, 40)); 

left-to-right gradient

漸變線的終點並不需要是在禁區邊緣我們正在填補。例如,如果它們位於填充區域內,則漸變將以與線段長度相等的週期重複。我們結束了一個時髦的條紋效果:

DrawGradient(new Point(65, 25), new Point(45, 35)); 

repeating gradient

您也可以將填充區域外的梯度端點。這導致一個更加微妙的色彩過渡:

DrawGradient(new Point(0, 90), new Point(140, 40)); 

gradient with endpoints outside the fill area

希望幫助您瞭解漸變畫筆如何線性工作。不要害怕嘗試。你可以自己輕鬆地嘗試這些東西。這是學習的最佳方式。

+0

這真的很有幫助...所以如果我設置點(0,0)和(0,100 )與(0,100)和(0,200)...或(0,0)相同,(50,50)與(50,50)和(100,100)相同...導致它們並行。 – 2014-11-06 14:06:33

+0

有點。平行線將保持漸變的方向相同,但請記住漸變從起點開始並在終點處結束。所以你可以有兩條不同長度的平行線,漸變看起來不一樣。例如(10,0)和(10,50)對比(20,0)和(20,25)。您也可以使用平行且長度相同的線條,但這些線條是偏移的,所以漸變看起來相同,但會偏移到起始位置。例如,(10,10)和(10,50)與(20,20)和(20,60)。 (續) – 2014-11-06 15:10:30

+0

但是你說得對,有多組起點和終點導致相同的精確梯度結果。 – 2014-11-06 15:11:30