GDI+ 提供水平、垂直和對角線線性漸層。 根據預設,線性漸層中的色彩會統一變更。 不過,您可以自定義線性漸層,讓色彩以非統一的方式變更。
水平線性漸層
下列範例使用水平線性漸層筆刷來填滿線條、橢圓形和矩形:
LinearGradientBrush linGrBrush(
Point(0, 10),
Point(200, 10),
Color(255, 255, 0, 0), // opaque red
Color(255, 0, 0, 255)); // opaque blue
Pen pen(&linGrBrush);
graphics.DrawLine(&pen, 0, 10, 200, 10);
graphics.FillEllipse(&linGrBrush, 0, 30, 200, 100);
graphics.FillRectangle(&linGrBrush, 0, 155, 500, 30);
LinearGradientBrush 建構函式會收到四個參數:兩個點和兩個色彩。 第一個點 (0, 10) 與第一個色彩 (紅色), 第二個點 (200, 10) 與第二個色彩 (藍色) 相關聯。 如您所預期,從 (0, 10) 到 (200, 10) 的線條逐漸從紅色變更為藍色。
點 (50, 10) 和 (200, 10) 中的 10 並不重要。 重要的是,這兩個點具有相同的第二個座標,連接它們的線條是水平線。 橢圓形和矩形也會逐漸從紅色變更為藍色,因為水準座標從0到200。
下圖顯示線條、橢圓形和矩形。 請注意,當水平座標超過 200 時,色彩漸層會重複出現。
自定義線性漸層
在上述範例中,當您從水準座標 0 移至 200 的水準座標時,色彩元件會以線性方式變更。 例如,第一個座標位於0和200之間的中點的點,其藍色元件將位於0和255之間的中點。
GDI+ 可讓您調整色彩從漸層的一個邊緣到另一個邊緣的變化。 假設您想要創建一個漸層筆刷,使顏色根據下表從黑色逐漸過渡到紅色。
| 水平座標 | RGB 元件 |
|---|---|
| 0 | (0, 0, 0) |
| 40 | (128, 0, 0) |
| 200 | (255, 0, 0) |
請注意,當水準座標只有 0 到 200 的 20% 時,紅色元件會處於半強度。
下列範例會呼叫 LinearGradientBrush 物件的 LinearGradientBrush::SetBlend 方法,將三個相對強度與三個相對位置產生關聯。 如上表所示,0.5 的相對強度與0.2的相對位置相關聯。 程序代碼會以漸層筆刷填滿橢圓形和矩形。
LinearGradientBrush linGrBrush(
Point(0, 10),
Point(200, 10),
Color(255, 0, 0, 0), // opaque black
Color(255, 255, 0, 0)); // opaque red
REAL relativeIntensities[] = {0.0f, 0.5f, 1.0f};
REAL relativePositions[] = {0.0f, 0.2f, 1.0f};
linGrBrush.SetBlend(relativeIntensities, relativePositions, 3);
graphics.FillEllipse(&linGrBrush, 0, 30, 200, 100);
graphics.FillRectangle(&linGrBrush, 0, 155, 500, 30);
下圖顯示產生的橢圓形和矩形。
對角線線性漸層
上述範例中的漸層是水平的,也就是說,當您沿著任何水平線移動時,顏色會逐漸變化。 您也可以定義垂直漸層和對角漸層。 下列程式代碼會將點 (0, 0) 和 (200, 100) 傳遞至 LinearGradientBrush 建構函式。 藍色與 (0, 0) 相關聯,而綠色與 (200, 100) 相關聯。 線條(手寫筆寬度為 10)和橢圓形會填滿線性漸層筆刷。
LinearGradientBrush linGrBrush(
Point(0, 0),
Point(200, 100),
Color(255, 0, 0, 255), // opaque blue
Color(255, 0, 255, 0)); // opaque green
Pen pen(&linGrBrush, 10);
graphics.DrawLine(&pen, 0, 0, 600, 300);
graphics.FillEllipse(&linGrBrush, 10, 100, 200, 100);
下圖顯示線條和橢圓。 請注意,橢圓中的顏色會隨著您沿著任何與通過 (0, 0) 和 (200, 100) 的線平行的方向移動而逐漸改變。