Gradientdialog - sélection de dégradés linéaires

Description

Tous les plus grand logiciels de traitement d'image tel que Photoshop ou Gimp, on une boite de dialogue de sélection pour les couleurs dégradés.

Les composants fournis avec Visual Studio comportent une boîte de dialogue de sélection de couleur, mais aucune ne permet de sélectionner un dégradé. Ce qui m'a amené à développer ce contrôle.

Ce composant ne prend en charge que les dégradés linéaires, si vous êtes amené à votre tour à développer un projet utilisant la classe "System.Drawing.Drawing2D.LinearGradientBrush" (comme un paint par exemple), ce contrôle vous sera forcément d'une grande utilité.

Il permet de gérer plusieurs points de couleur (voir "ColorBlend "), le rayon du dégradé, ainsi que la correction des Gama offerte par l'objet LinearGradientBrush du Framework.

Il comporte aussi plusieurs modes d'ouverture simple ou dégradé multiple, gère l'enregistrement de votre collection de dégradés dans un fichier (comme Photoshop).

Coté code:

Ce projet à été conçu sous Visual Studio 2008

Il comporte plusieurs thèmes pédagogiques, vous pourrez y retrouver notamment :

- Une démonstration des différentes méthodes de l'espace de nom "System.Drawing.Drawing2D"

- La sérialisation binaire personnalisé via l'implémentation de "ISerializable", Pour sérialiser manuellement une classe qui ne possède pas d'attribut sérialisable (ce qui est le cas de "System.Drawing.Drawing2D.ColorBlend")

- Vous y trouverez aussi comment créer et implémenter une Interface (IGradient)

je suis ouvert à tout commentaires pour l'amélioration de cette source !

Source / Exemple :


'**************************************************
        '**** Sélectionne de dégradés pré-enregistrés *****
        '**************************************************
        '
        'Mode d'ouverture de la boite de dialogue
        '
        'Dialog_Allow_NewDeleteEdit = Affiche le bouton permettant les modification du fichier de dégradés
        'Dialog_Allow_SaveLoad = Autorise l'utilisateur à changer de fichier de dégradés et à le sauvegarder
        'Dialog_MultiSelect = Autorise la multisélection de dégradés
        '
        GradientDialog1.flags = GradientDialog.CollectorDialogFlags.Default_Dialog
        '
        'Spécifie le filtre de la boite de dialogue Ouvrir/Sauver (Dialog_Allow_SaveLoad doit être spécifié)
        GradientDialog1.Filters = "Fichier de dégradé (*.deg)|*.deg|Tous fichiers (*.*)|*.*"
        '
        'Facultatif => Vous pouvez spécifier un emplacement de fichier à la boîte de dialogue
        'GradientDialog1.FileName = "c:\dégradés.deg"
        '
        'Affiche la boîte de dialogue
        If GradientDialog1.ShowCollector = Windows.Forms.DialogResult.OK Then
            '
            'On regarde le nombre d'éléments sélectionnés dans la boîte de dialogue
            If GradientDialog1.SelectedItems.Items.Count > 0 Then
                '
                'On récupère l'objet Gradient, que l'on convertit en
                'System.Drawing.Drawing2D.LinearGradientBrush()
                'via la méthode ToBrush
                '
                Dim LinearGradient As LinearGradientBrush = _
                    GradientDialog1.SelectedItems.Items(0).ToBrush(0, 0, 10, 10)
                '
            End If
            '
        End If

        '**************************************************
        '************ Sélection d'un dégradé **************
        '**************************************************
        '
        'Facultatif => Vous pouvez spécifier un dégradé à charger dans la boîte de dialogue
        'GradientDialog1.Gradient = MyGradient' (Objet Gradient)
 
        'Affiche la boîte de dialogue
        If GradientDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
            '
            'On récupère l'objet Gradient, que l'on convertit en
            'System.Drawing.Drawing2D.LinearGradientBrush()
            'via la méthode ToBrush
            '
            Dim LinearGradient As LinearGradientBrush = _
                    GradientDialog1.Gradient.ToBrush(0, 0, 10, 10)
            '
        End If

Conclusion :


Je compte peut être l'améliorer en ajoutant une gestion d'autre type de dégradés via la classe "System.Drawing.Drawing2D.PathGradientBrush", et un implémentation d'un contrôle gérant la couleur des pics via son code ARGB.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.