Gewusst wie: Erstellen eines linearen Farbverlaufs
Aktualisiert: November 2007
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.
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-Anteile |
---|---|
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.
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.
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