IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Modifier certaine couleur dans une image


Sujet :

VB.NET

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut Modifier certaine couleur dans une image
    Bonjour,

    J'aurai voulu savoir s'il est possible de modifier certain couleur dans une image sur vb.net car en se moment je travail sur un gestionnaire avec un DGV qui contient des images qui clignote et qui est en faite une copie d'un vrai gestionnaire industriel. Dans le vrai gestionnaire, je me rend compte que les images ont un point d’exclamation gris au centre de l'image de la même couleur que le fond gris des lignes du gestionnaire. Et lorsque je sélectionne une ligne, l'ensemble du fond de la ligne deviens bleu, jusqu'ici c'est normal, DGV sait très bien faire sa mais il y a un petit truc qui me fait pensé qu'il est possible de modifier une image est que lorsque je sélectionne ma ligne sur le vrai gestionnaire, le point d'exclamation devient bleu lui aussi pendant que les autres couleurs de l'image ne change pas sauf lors du clignotement ou elles deviennent clair puis foncé.

    Alors je me suis dit qu'il y a deux solutions, soit le programmeur de cette application a prit en compte tous les cas possible et a une image pour chaque cas, soit il modifie l'image en fonction des cas. J'ai aussi vérifié dans la base de donnée de l'application pour retrouvé les images et j'ai trouvé qu'une seule image. Ce qui me laisse a penser que c'est possible de modifier le contenu d'une image genre passé le blanc en gris ou le gris en bleu suivant certaine situation !!

    Merci d'avance pour vos suggestions !!

    PS: J'en ne sais pas en quoi est programmé la version original de mon gestionnaire.

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    as tu cherché sur google ?
    car il y a des réponses ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    J'ai cherché mais c'est trop mal expliqué et sa répond pas a ma question qui est de savoir si c'est réalisable ou pas et si sa vaut le coup de faire soit même les images ou les modifier via une procédure car j'ai 18 images différentes dans mon gestionnaire en tous suivant clignotement, niveau de priorité et sélectionné ou pas.

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    tout est faisable
    dans le framework en windows forms il y a pas mal de choses pour modifier des images (system.drawing, system.drawing.imaging)

    après pour 18 images il vaut mieux les créer hors du programme et les charger selon les besoins
    pour plus il peut etre interressant de les créer par code
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    En faite, j'ai que trois images différentes mais suivant certaine situation, je me retrouve au final avec un jeu de 18 images différentes mais sa reste 3 groupes de six images et la seule chose qui va changer est la couleur de fond de l'image donc voila pourquoi je demande !!

    Ensuite j'aurai bien aimé faire un programme intelligent qui me regle directement le fond de l'image en fonction du fond du DGV car c'est pas pratique de changer le fond de 18 images si mon client décide de changer le fond du DGV, je dois le changer sur 18 images a nouveau ^^


  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    http://msdn.microsoft.com/fr-fr/library/sbashfw3.aspx
    à gauche il y a liste des classes du namespace, je ne les connais pas toutes mais le principe c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim newimage as new system.Drawing.bitmap(width, height)
    using g as graphics = graphics.Fromimage(newimage) ' tout ce qui est dessiné via ce graphics est dessiné sur newimage
       g.drawimage(image d_origine, coordonnées de dessin ,..., un imageattributes) ' il y a 30 surcharges, regarder laquelle te convient
    end ufing
    imageattributes est une classe avec plein de paramétrage de modifications
    colormatrix c'est pour faire des effet de changement de couleur par "calcul"
    colormap ca doit etre pour remplacer une couleur par une autre
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    Bon voila une petite application qui inverse la couleur d'une image, j'ai réussi a retrouvé cette procédure sur youtube. Elle est assez simple a comprendre mais je voudrai bien l'adapter par rapport a mes besoin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
        ' Permet d'inverser les couleurs d'une image
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim bmp As New Bitmap(imgListPrio.Images(0))
            Dim red, green, blue As Integer
            With bmp
                For i As Integer = 0 To .Width - 1
                    For j As Integer = 0 To .Height - 1
                        red = Int(.GetPixel(i, j).R)
                        green = Int(.GetPixel(i, j).G)
                        blue = Int(.GetPixel(i, j).B)
                        .SetPixel(i, j, Color.FromArgb(255 - red, 255 - green, 255 - blue))
                    Next
                Next
            End With
            imgListPrio.Images(0) = bmp
        End Sub
    PS: plus exactement, dans ma boucle For, il faudra que je récupère ma couleur blanche de mon pixel et la vérifie avec la vrai couleur blanche, si c'est le cas, alors je change le pixel avec SetPixel de la couleur que je veux sinon je fait rien, ainsi de suite et à la fin je l'imprime dans une nouvelle image pour pouvoir gardé mon image d'origine.

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    Bon j'arrive maintenant a détecter le blanc et le passé en noir mais l'image est pas jolie a voir encore !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            Dim bmp As New Bitmap(imgListPrio.Images(3))
            With bmp
                For i As Integer = 0 To .Width - 1
                    For j As Integer = 0 To .Height - 1
                        If bmp.GetPixel(i, j) = Color.FromArgb(255, 255, 255) Then
                            .SetPixel(i, j, Color.FromArgb(0, 0, 0))
                        End If
                    Next
                Next
            End With
    PS: Il faudra maintenant que je remplace le blanc par la couleur de fond du DGV !!

  9. #9
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            Dim bmp As New Bitmap(imgListPrio.Images(3))
            With bmp
                For i As Integer = 0 To .Width - 1
                    For j As Integer = 0 To .Height - 1
                        If bmp.GetPixel(i, j) = Color.FromArgb(255, 255, 255) Then
                            .SetPixel(i, j, DataGridView1.DefaultCellStyle.BackColor)
                        End If
                    Next
                Next
            End With
    Voila sa marche bien par contre il change pas la couleur de tous les pixel du coup c'est moche ^^ je vais voir petit a petit !!

    PS: je pense qu'il faut que je récupère l'image directement dans le fichier au lieu de la prendre de la liste car je pense qu'elle est déjà altéré dans ma liste d'image.

  10. #10
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,

    Je ne sais pas d'où tu as récupéré tes images mais méfie toi d'une chose, il est rare que le blanc d'une image soit 100% blanc. Tu peux avoir des pixels qui ne correspondent pas exactement à Color.FromArgb(255, 255, 255) mais à Color.FromArgb(255, 255, 254). L'oeil ne voit pas la différence mais ton programme si ...

  11. #11
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    Justement ce mon problème pourtant j'ai bien fait attention a bien modifier mon image sur paint pour que le blanc soit blanc entièrement !!

    Je vais essayé de voir si je peu pas sélectionner une plage genre (250,250,250) a (255, 255, 255) ???

  12. #12
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    J'ai récupéré l'image directement dans le dossier et tous le blanc a prit la couleur du fond du DGV, sa marche super bien. Mon souci est du au fait que mon image était enregister en (.gif) je pense, je l'ai passé en (.png) et mon probleme a disparu ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            Dim bmp As Bitmap = Image.FromFile("C:\Users\tfh\Desktop\image\img1.png")
            With bmp
                For i As Integer = 0 To .Width - 1
                    For j As Integer = 0 To .Height - 1
                        If bmp.GetPixel(i, j) = Color.FromArgb(255, 255, 255) Then
                            .SetPixel(i, j, DataGridView1.DefaultCellStyle.BackColor)
                        End If
                    Next
                Next
            End With
            imgListPrio.Images(3) = bmp

  13. #13
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    Par contre je viens de me rendre compte que lorsque je réalise un zoom, le gris qui a remplacé mon blanc, n'est pas le même que celui utilisé pour mon DGV, je trouve sa un peu bizarre !!

    Nom : teste2.png
Affichages : 128
Taille : 4,4 Ko

  14. #14
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    Pourquoi pas tout simplement utiliser une image avec un fond transparent.
    Je viens de tester à l'instant si tu défini un backcolor sur la cellule de ton datagrid, le fond de ton image aura la couleur de la cellule.

  15. #15
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    Je viens justement de le faire sans me rendre compte, je comprend rien maintenant lorsque je sélectionne une ligne, automatiquement le gris au milieu deviens bleu ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
            Dim bmp As Bitmap = Image.FromFile("C:\Users\tfh\Desktop\image\img1.png")
            With bmp
                For i As Integer = 0 To .Width - 1
                    For j As Integer = 0 To .Height - 1
                        'Dim red As Integer = Int(bmp.GetPixel(5, 5))
                        If bmp.GetPixel(i, j) = Color.FromArgb(255, 255, 255) Then
                            .SetPixel(i, j, DataGridView1.Rows(3).DefaultCellStyle.BackColor)
                        End If
                    Next
                Next
            End With
            imgListPrio.Images(3) = bmp
            imgListPrio.Images.Add(bmp)
            DataGridView1.Rows(3).Cells(0).Value = bmp
    Un truc de fou, j'ai résolu deux problème d'un coup ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Changer différentes couleurs dans une image
    Par cashmoney dans le forum Flex
    Réponses: 13
    Dernier message: 08/10/2009, 18h06
  2. mesurer la variabilite' de la couleur dans une image
    Par aichaeside dans le forum Images
    Réponses: 4
    Dernier message: 26/05/2009, 01h25
  3. Réponses: 6
    Dernier message: 15/02/2008, 11h10
  4. Modifier des pixels dans une image
    Par hitomigaia dans le forum wxWidgets
    Réponses: 2
    Dernier message: 15/11/2007, 18h16
  5. Couleur dans une image
    Par sandball22 dans le forum Images
    Réponses: 10
    Dernier message: 19/01/2007, 02h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo