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.

Dégradé linéaire

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.

Dégradé linéaire

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

Dégradé linéaire

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

Voir aussi

Autres ressources

Utilisation d'un pinceau à dégradé pour remplir des formes

Graphiques et dessins dans les Windows Forms