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

Soyez le premier à donner votre avis sur cette source.

Vue 6 854 fois - Téléchargée 483 fois

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

Ajouter un commentaire

Commentaires

Arnal88
Messages postés
96
Date d'inscription
samedi 21 octobre 2006
Statut
Membre
Dernière intervention
25 avril 2009
-
Programme intéressant, code bien structuré... Bon boulot ! 10/10

Une suggestion : créer un contrôle utilisateur pour choisir l'orientation du dégradé avec la souris (à la manière Photoshop). Pourquoi appelles-tu ceci "Rayon" ?
Mayzz
Messages postés
2859
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
17 -
Oui tu as raison c'est en fait l'axe...

Mais bizarement j'ai garder cela d'une fonction d'un SDK pour symbian OS, qui elle nomme le paramètre radius au lieu d'axis...

Alors j'ai simplement gardé l'appellation.
Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57 -
manque plus que le HSB et le CMYB ^^
Mayzz
Messages postés
2859
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
17 -
Rentenu, pour la prochaine mise à jour.

Merci.

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.