Comment : créer un dégradé linéaire
GDI+ fournit des dégradés linéaires horizontaux, verticaux et diagonaux. Par défaut, la couleur d'un dégradé linéaire varie de façon régulière. Toutefois, il est possible de le personnaliser pour obtenir une variation irrégulière de la couleur.
L'exemple suivant remplit une ligne, une ellipse et un rectangle avec un pinceau à dégradé linéaire horizontal.
Le constructeur LinearGradientBrush reçoit quatre arguments : deux points et deux couleurs. Le premier point (0, 10) est associé à la première couleur (rouge) et le second (200, 10) est associé à la seconde couleur (bleu). Le trait dessiné de (0, 10) à (200, 10) passe donc progressivement du rouge au bleu.
Parmi les points, les valeurs 10 (50, 10) et (200, 10) n'ont pas d'importance. L'essentiel est que les deux points aient une seconde coordonnée identique, pour que le trait qui les relie soit horizontal. L'ellipse et le rectangle passent également du rouge au bleu puisque la coordonnée horizontale progresse de 0 à 200.
L'illustration suivante montre le trait, l'ellipse et le rectangle. Notez que le dégradé de couleur se répète lorsque la coordonnée horizontale dépasse 200.
Pour utiliser des dégradés linéaires horizontaux
Passez le rouge opaque et le bleu opaque en tant que troisième et quatrième arguments, respectivement.
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);
Dans l'exemple précédent, les composants de couleur changent linéairement lorsque vous passez de la coordonnée horizontale 0 à la coordonnée horizontale 200. Par exemple, un point dont la première coordonnée se trouve à mi-chemin entre 0 et 200 aura un composant bleu à mi-chemin entre 0 et 255.
GDI+ vous permet d'ajuster la façon dont une couleur varie d'un bord d'un dégradé à l'autre. à supposer que vous vouliez créer un pinceau à dégradé qui passe du noir au rouge conformément au tableau suivant.
Coordonnée horizontale |
des composants RGB ; |
---|---|
0 |
(0, 0, 0) |
40 |
(128, 0, 0) |
200 |
(255, 0, 0) |
Notez que le composant rouge atteint la moitié de son intensité lorsque la coordonnée horizontale n'a progressé que de 20 pour cent sur la plage de valeurs comprise entre 0 et 200.
L'exemple suivant définit la propriété Blend d'un objet LinearGradientBrush pour associer trois intensités relatives à trois positions relatives. Comme dans le tableau précédent, l'exemple associe une intensité relative égale à 0,5 à une position relative de 0,2. Le code remplit une ellipse et un rectangle avec le pinceau à dégradé.
L'illustration suivante présente l'ellipse et le rectangle ainsi obtenus.
Pour personnaliser des dégradés linéaires
Passez le noir opaque et le rouge opaque en tant que troisième et quatrième arguments, respectivement.
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);
Dans les exemples précédents, les dégradés étaient horizontaux ; la couleur change progressivement à mesure que vous vous déplacez le long d'une ligne horizontale quelconque. Vous pouvez également définir des dégradés verticaux et en diagonale.
L'exemple suivant passe les points (0, 0) et (200, 100) à un constructeur LinearGradientBrush. La couleur bleue est associée à (0,0) et la couleur verte à (200,100). Le pinceau à dégradé linéaire remplit une ligne (correspondant à une épaisseur de crayon égale à 10) et une ellipse.
L'illustration suivante contient la ligne et l'ellipse. Notez que la couleur qui remplit l'ellipse change progressivement à mesure que vous vous déplacez le long de n'importe quelle ligne parallèle à une ligne passant par (0, 0) et (200, 100).
Pour créer des dégradés linéaires en diagonale
Passez le bleu opaque et le vert opaque en tant que troisième et quatrième arguments, respectivement.
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);