Nasıl yapılır: Doğrusal Gradyan Oluşturma
GDI+ yatay, dikey ve köşegen doğrusal degradeler sağlar. Varsayılan olarak, doğrusal bir gradyandaki renk bir şekilde değişir. Ancak, bir doğrusal degradeyi, rengin tek biçimli olmayan bir biçimde değişmemesi için özelleştirebilirsiniz.
Not
Bu makaledeki örnekler, bir denetimin Paint olay işleyicisinden çağrılan yöntemlerdir.
Aşağıdaki örnek, Yatay doğrusal gradyan fırçası ile bir çizgiyi, elipsi ve dikdörtgeni doldurur.
LinearGradientBrushOluşturucu dört bağımsız değişken alır: iki noktası ve iki renk. İlk nokta (0, 10) ilk renkle (kırmızı) ilişkilendirilir ve ikinci nokta (200, 10) ikinci renk (mavi) ile ilişkilendirilir. Tahmin ettiğiniz gibi, (0, 10) ile (200, 10) arasında çizilen çizgi, yavaş yavaş kırmızı ve mavi arasında değişir.
(0, 10) ve (200, 10) noktaları içindeki 10s önemli değildir. Önemli olan, iki noktanın aynı ikinci koordinat ile aynı olması durumunda, birbirine bağlanan çizgi yataydır. Yatay koordinat 0 ' dan 200 ' e geçilerek elips ve dikdörtgen Ayrıca kırmızı ile mavi arasında değişir.
Aşağıdaki çizimde çizgi, elips ve dikdörtgen gösterilmektedir. Renk gradyanının, yatay koordinat 200 ' den daha fazla arttığı için kendisini tekrarlar.

Yatay doğrusal degradeleri kullanmak için
Donuk Kırmızı ve donuk mavi, sırasıyla üçüncü ve dördüncü bağımsız değişken olarak geçirin.
public void UseHorizontalLinearGradients(PaintEventArgs e) { LinearGradientBrush linGrBrush = new LinearGradientBrush( new Point(0, 10), new Point(200, 10), Color.FromArgb(255, 255, 0, 0), // Opaque red Color.FromArgb(255, 0, 0, 255)); // Opaque blue Pen pen = new Pen(linGrBrush); e.Graphics.DrawLine(pen, 0, 10, 200, 10); e.Graphics.FillEllipse(linGrBrush, 0, 30, 200, 100); e.Graphics.FillRectangle(linGrBrush, 0, 155, 500, 30); }Dim linGrBrush As New LinearGradientBrush( _ New Point(0, 10), _ New Point(200, 10), _ Color.FromArgb(255, 255, 0, 0), _ Color.FromArgb(255, 0, 0, 255)) Dim pen As New Pen(linGrBrush) e.Graphics.DrawLine(pen, 0, 10, 200, 10) e.Graphics.FillEllipse(linGrBrush, 0, 30, 200, 100) e.Graphics.FillRectangle(linGrBrush, 0, 155, 500, 30)
Yukarıdaki örnekte, bir yatay koordinatı olan 0 ' ın yatay 200 koordinasyonu sırasında renk bileşenleri doğrusal şekilde değişir. Örneğin, ilk koordinatı 0 ile 200 arasında olan bir nokta, 0 ile 255 arasındaki yarı bir mavi bileşene sahip olacaktır.
GDI+, bir degradenin bir kenarından diğerine ne kadar değişeceğini ayarlamanıza olanak sağlar. Aşağıdaki tabloya göre siyahtan kırmızıya değişen bir gradyan fırçası oluşturmak istediğinizi varsayalım.
| Yatay koordinat | RGB bileşenleri |
|---|---|
| 0 | (0, 0, 0) |
| 40 | (128, 0, 0) |
| 200 | (255, 0, 0) |
Yatay koordinat, 0 ile 200 arasında yalnızca yüzde 20 olduğunda kırmızı bileşenin yarı şiddette olduğunu unutmayın.
Aşağıdaki örnek, üç göreli LinearGradientBrush.Blend yoğunluğu üç göreli konum ile ilişkilendirmek için özelliğini ayarlar. Yukarıdaki tabloda olduğu gibi, 0,5 göreli bir yoğunluğu 0,2 ' in göreli konumuyla ilişkilendirilir. Kod, bir elipsi ve bir dikdörtgeni gradyan fırçası ile doldurur.
Aşağıdaki çizimde elde edilen elips ve dikdörtgen gösterilmektedir.

Doğrusal Degradeleri özelleştirmek için
Donuk siyah ve donuk kırmızı, sırasıyla üçüncü ve dördüncü bağımsız değişken olarak geçirin.
public void CustomizeLinearGradients(PaintEventArgs e) { LinearGradientBrush linGrBrush = new LinearGradientBrush( new Point(0, 10), new Point(200, 10), Color.FromArgb(255, 0, 0, 0), // Opaque black Color.FromArgb(255, 255, 0, 0)); // Opaque red float[] relativeIntensities = { 0.0f, 0.5f, 1.0f }; float[] relativePositions = { 0.0f, 0.2f, 1.0f }; //Create a Blend object and assign it to linGrBrush. Blend blend = new Blend(); blend.Factors = relativeIntensities; blend.Positions = relativePositions; linGrBrush.Blend = blend; e.Graphics.FillEllipse(linGrBrush, 0, 30, 200, 100); e.Graphics.FillRectangle(linGrBrush, 0, 155, 500, 30); }Dim linGrBrush As New LinearGradientBrush( _ New Point(0, 10), _ New Point(200, 10), _ Color.FromArgb(255, 0, 0, 0), _ Color.FromArgb(255, 255, 0, 0)) Dim relativeIntensities As Single() = {0.0F, 0.5F, 1.0F} Dim relativePositions As Single() = {0.0F, 0.2F, 1.0F} 'Create a Blend object and assign it to linGrBrush. Dim blend As New Blend() blend.Factors = relativeIntensities blend.Positions = relativePositions linGrBrush.Blend = blend e.Graphics.FillEllipse(linGrBrush, 0, 30, 200, 100) e.Graphics.FillRectangle(linGrBrush, 0, 155, 500, 30)
Yukarıdaki örneklerde bulunan degradeler yataydır; diğer bir deyişle, herhangi bir yatay çizgi üzerinde hareket ettiğiniz sürece renk kademeli olarak değişir. Dikey degradeler ve çapraz degradeler de tanımlayabilirsiniz.
Aşağıdaki örnek, (0, 0) ve (200, 100) noktalarını bir LinearGradientBrush oluşturucuya geçirir. Mavi renk (0, 0) ile ilişkilendirilir ve yeşil rengi (200, 100) ile ilişkilendirilir. Bir çizgi (kalem genişliği 10 ile) ve elips, doğrusal gradyan fırçası ile doldurulur.
Aşağıdaki çizimde çizgi ve elips gösterilmektedir. (0, 0) ve (200, 100) arasında bir satıra paralel olan herhangi bir satırı hareket ettirmek için Elips içindeki rengin kademeli olarak değiştiği unutulmamalıdır.

Köşegen doğrusal degradeler oluşturmak için
Her sırasıyla üçüncü ve dördüncü bağımsız değişken olarak donuk mavi ve donuk yeşil bir değer geçirin.
public void CreateDiagonalLinearGradients(PaintEventArgs e) { LinearGradientBrush linGrBrush = new LinearGradientBrush( new Point(0, 0), new Point(200, 100), Color.FromArgb(255, 0, 0, 255), // opaque blue Color.FromArgb(255, 0, 255, 0)); // opaque green Pen pen = new Pen(linGrBrush, 10); e.Graphics.DrawLine(pen, 0, 0, 600, 300); e.Graphics.FillEllipse(linGrBrush, 10, 100, 200, 100); }Dim linGrBrush As New LinearGradientBrush( _ New Point(0, 0), _ New Point(200, 100), _ Color.FromArgb(255, 0, 0, 255), _ Color.FromArgb(255, 0, 255, 0)) ' opaque blue ' opaque green Dim pen As New Pen(linGrBrush, 10) e.Graphics.DrawLine(pen, 0, 0, 600, 300) e.Graphics.FillEllipse(linGrBrush, 10, 100, 200, 100)