建立線性漸層
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) 逐漸從紅色變更為藍色的線條。
10s in the points (50, 10) and (200, 10) are not important. 重要的是,這兩個點有相同的第二個座標,連接它們的線條是水平線。 橢圓形和矩形也會隨著水準座標從 0 到 200 逐漸從紅色變更為藍色。
下圖顯示線條、橢圓形和矩形。 請注意,色彩漸層會重複本身,因為水準座標增加超過 200。
自訂線性漸層
在上述範例中,當您從水準座標 0 移至 200 的水準座標時,色彩元件會以線性方式變更。 例如,第一個座標介於 0 到 200 之間的點會有一個介於 0 到 255 之間的藍色元件。
GDI+ 可讓您調整色彩從漸層的一邊緣到另一個邊緣的變化方式。 假設您想要根據下表建立從黑色變更為紅色的漸層筆刷。
水準座標 | RGB 元件 |
---|---|
0 | (0, 0, 0) |
40 | (128, 0, 0) |
200 | (255, 0, 0) |
請注意,當水準座標只有 20% 從 0 到 200 的方式時,紅色元件會處於半濃度。
下列範例會呼叫 LinearGradientBrush::SetBlend 物件的 LinearGradientBrush 方法,以將三個相對強度與三個相對位置產生關聯。 如上表所示,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) 的線條平行而逐漸變更。