Gewusst wie: Erstellen eines linearen Farbverlaufs

GDI+ bietet horizontale, vertikale und diagonale lineare Farbverläufe. Die Farbe in einem linearen Farbverlauf wird im Normalfall gleichmäßig geändert. Sie können einen linearen Farbverlauf jedoch auch anpassen, sodass die Farbe ungleichmäßig geändert wird.

Im folgenden Beispiel werden eine Linie, eine Ellipse und ein Rechteck mit einem Pinsel mit horizontalem linearem Farbverlauf ausgefüllt.

Der LinearGradientBrush-Konstruktor empfängt vier Argumente: zwei Punkte und zwei Farben. Der erste Punkt (0, 10) ist mit der ersten Farbe (Rot) und der zweite Punkt (200, 10) mit der zweiten Farbe (Blau) verknüpft. Erwartungsgemäß ändert sich die Farbe der Linie, die von (0, 10) nach (200, 10) gezeichnet wird, graduell von Rot nach Blau.

Die Werte 10 in den Punkten (50, 10) und (200, 10) sind nicht wichtig. Es kommt lediglich darauf an, dass die zweite Koordinate der beiden Punkte identisch ist, die Verbindungslinie also horizontal verläuft. Auch die Farbe der Ellipse und des Rechtecks ändert sich von Rot nach Blau, wenn die horizontale Koordinate von 0 auf 200 ansteigt.

In der folgenden Abbildung werden die Linie, die Ellipse und das Rechteck angezeigt. Beachten Sie, dass der Farbverlauf sich wiederholt, wenn die horizontale Koordinate über den Wert 200 hinausgeht.

Linearer Farbverlauf

So verwenden Sie horizontale lineare Farbverläufe

  • Übergeben Sie die nicht transparenten Farben Rot und Blau als drittes bzw. viertes Argument.

            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)
    
    
    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);
    

Die Farbkomponenten im vorhergehenden Beispiel verändern sich beim Verschieben der horizontalen Koordinate von 0 auf 200 linear. Wenn sich beispielsweise ein Punkt genau zwischen 0 und 200 befindet, liegt sein Blauwert genau in der Mitte zwischen 0 und 255.

GDI+ ermöglicht es Ihnen, die Art des Farbwechsels von einem Ende des Farbverlaufs zum anderen anzupassen. Angenommen, Sie möchten einen Farbverlaufspinsel erstellen, der entsprechend der folgenden Tabelle von Schwarz in Rot übergeht:

Horizontale Koordinate

RGB-Komponenten

0

(0, 0, 0)

40

(128, 0, 0)

200

(255, 0, 0)

Beachten Sie, dass der Rotanteil bereits die Hälfte der maximalen Intensität hat, wenn die horizontale Koordinate erst 20 Prozent der Strecke von 0 nach 200 entspricht.

Im folgenden Beispiel wird die Blend-Eigenschaft eines LinearGradientBrush-Objekts festgelegt, um drei relative Intensitäten mit drei relativen Positionen zu verknüpfen. Wie in der vorangehenden Tabelle wird die relative Intensität 0.5 mit der relativen Position 0.2 verknüpft. Durch den Code werden eine Ellipse und ein Rechteck mit dem Farbverlaufspinsel ausgefüllt.

In der folgenden Abbildung sind die resultierende Ellipse und das resultierende Rechteck dargestellt.

Linearer Farbverlauf

So passen Sie lineare Farbverläufe an

  • Übergeben Sie die nicht transparenten Farben Schwarz und Rot als drittes bzw. viertes Argument.

            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)
    
    
    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);
    

Die Farbverläufe in den bisherigen Beispielen verlaufen in horizontaler Richtung, d. h., die Farbe wechselt graduell entlang einer beliebigen horizontalen Linie. Darüber hinaus können Sie auch vertikale und diagonale Farbverläufe festlegen.

Im folgenden Beispiel werden die Punkte (0, 0) und (200, 100) an einen LinearGradientBrush-Konstruktor übergeben. Die Farbe Blau wird mit (0, 0) und die Farbe Grün mit (200, 100) verknüpft. Eine Linie (mit Stiftbreite 10) und eine Ellipse werden mit dem Pinsel mit linearem Farbverlauf ausgefüllt.

In der folgenden Abbildung sind die Linie und die Ellipse dargestellt. Die Farbe in der Ellipse wechselt graduell entlang einer beliebigen Linie, die parallel zu der Linie mit den Punkten (0, 0) und (200, 100) verläuft.

Linearer Farbverlauf

So erstellen Sie diagonale lineare Farbverläufe

  • Übergeben Sie die nicht transparenten Farben Blau und Grün als drittes bzw. viertes Argument.

            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)
    
    
    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);
    

Siehe auch

Weitere Ressourcen

Verwenden eines Pinsels für Farbverläufe zum Ausfüllen von Formen

Grafik und Zeichnen in Windows Forms