Freigeben über


Erstellen eines linearen Farbverlaufs

GDI+ bietet horizontale, vertikale und diagonale lineare Farbverläufe. Standardmäßig ändert sich die Farbe in einem linearen Farbverlauf einheitlich. Sie können jedoch einen linearen Farbverlauf so anpassen, dass sich die Farbe in nicht einheitlicher Weise ändert.

Anmerkung

Die Beispiele in diesem Artikel sind Methoden, die über den Paint-Ereignishandler eines Steuerelements aufgerufen werden.

Im folgenden Beispiel werden eine Linie, eine Ellipse und ein Rechteck mit einem horizontalen linearen Farbverlaufspinsel gefüllt.

Der LinearGradientBrush-Konstruktor empfängt vier Argumente: zwei Punkte und zwei Farben. Der erste Punkt (0, 10) ist der ersten Farbe (Rot) zugeordnet, und der zweite Punkt (200, 10) ist der zweiten Farbe (Blau) zugeordnet. Wie Sie erwarten, ändert sich die Linie von (0, 10) bis (200, 10) allmählich von Rot in Blau.

Die „10“ in den Punkten (0, 10) und (200, 10) ist nicht relevant. Wichtig ist, dass die beiden Punkte die gleiche zweite Koordinate aufweisen – die Linie, die sie verbindet, ist horizontal. Die Ellipse und das Rechteck ändern sich auch allmählich von Rot zu Blau, wenn die horizontale Koordinate von 0 bis 200 verläuft.

Die folgende Abbildung zeigt die Linie, die Ellipse und das Rechteck. Beachten Sie, dass sich der Farbverlauf wiederholt, wenn die horizontale Koordinate über 200 hinausgeht.

Eine Linie, eine Ellipse und ein Rechteck, das mit einem Farbverlauf gefüllt ist.

So verwenden Sie horizontale, lineare Farbverläufe

  • Übergeben Sie deckendes Rot und deckendes Blau als drittes bzw. viertes Argument.

    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)
    
    

Im vorherigen Beispiel ändern sich die Farbkomponenten linear, während Sie von einer horizontalen Koordinate von 0 zu einer horizontalen Koordinate von 200 wechseln. Beispielsweise weist ein Punkt, dessen erste Koordinate zwischen 0 und 200 liegt, eine blaue Komponente auf, die zwischen 0 und 255 liegt.

Mit GDI+ können Sie die Art und Weise anpassen, wie eine Farbe von einem Rand eines Farbverlaufs zum anderen variiert. Angenommen, Sie möchten einen Farbverlaufspinsel erstellen, der nach 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 die rote Komponente bei einer halben Intensität liegt, wenn die horizontale Koordinate nur 20 Prozent des Weges von 0 bis 200 beträgt.

Im folgenden Beispiel wird die Eigenschaft LinearGradientBrush.Blend so festgelegt, dass drei relativen Positionen drei relative Intensitäten zugeordnet werden. Wie in der vorstehenden Tabelle ist eine relative Intensität von 0,5 einer relativen Position von 0,2 zugeordnet. Der Code füllt eine Ellipse und ein Rechteck mit dem Farbverlaufspinsel.

Die folgende Abbildung zeigt die resultierende Ellipse und das Rechteck.

Eine Ellipse und ein Rechteck, das mit einem horizontalen Farbverlauf gefüllt ist.

So passen Sie lineare Farbverläufe an

  • Übergeben Sie deckendes Schwarz und deckendes Rot als drittes bzw. viertes Argument.

    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)
    
    

Die Farbverläufe in den vorherigen Beispielen waren horizontal; das heißt, die Farbe ändert sich schrittweise, wenn Sie sich entlang einer horizontalen Linie bewegen. Sie können auch vertikale Farbverläufe und diagonale Farbverläufe definieren.

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

Die folgende Abbildung zeigt die Linie und die Ellipse. Beachten Sie, dass sich die Farbe in der Ellipse allmählich ändert, während Sie sich entlang einer Linie bewegen, die parallel zu der Linie verläuft, die durch (0, 0) und (200, 100) geht.

Eine Linie und eine Ellipse, die mit einem diagonalen Farbverlauf gefüllt sind

So erstellen Sie diagonale lineare Farbverläufe

  • Übergeben Sie deckendes Blau und deckendes Grün als drittes bzw. viertes Argument.

    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)
    
    

Weitere Informationen