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

C# Discussion :

Récupérer un pixel dans une pictureBox!


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Par défaut Récupérer un pixel dans une pictureBox!
    Bonjour,

    Voilà je veux récupérer la couleur d'un pixel (par ailleurs je voudrait également écrire la couleur d'un pixel).
    J'ai déjà vu beaucoup de forum la dessus qui l'explique très bien mais petite subtilité pour moi je ne créer pas de Bitmap et tous ses forum sont basé sur le fait que la plupart du temps, quand on fait une pictureBox c'est pour y charger une image. Si quelqu’un à une idée?

    Cordialement,

    V.LG

  2. #2
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 58
    Par défaut
    je me lance sans pleine certitude...
    Je suppose qu'il faut convertir ta picturebox en bitmap (en la chargeant par exemple) soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Bitmap MyBitmap = new Bitmap(MyPicturebox.Image);
    Color MyColorToFind;
    Int32 iPosX=0;    // Tu défini la position X et Y du pixel
    Int32 iPosY=0;
    MyColorToFind = MyBitmap.GetPixel(iPosX, iPosY);
    ça doit être quelque chose dans ce genre là...

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Par défaut
    C'était une bonne idée jpbelmondo59 mais la transformation ne marche pas.
    Ça renvoie "La référence d'objet n'est pas définie à une instance d'un objet"

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Par défaut
    Non en fait la transformation passe mais c'est le :

    - MyColorToFind = MyBitmap.GetPixel(20, 20);

    qui ne passe pas.

  5. #5
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 58
    Par défaut
    Curieux, tu peux m'afficher le code stp... car si c'est dans la même méthode ou via une fonction, ça devrait pas poser de souci

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    "Qui ne passe pas"...

    Ca ne veut rien dire en terme de développement.

    Ca génère une erreur ? une exception ? aucun résultat ?

    Déjà, il faut tester ton objet pour être sur qu'il ne soit pas nul quand même...

    Et normalement, le code proposé est plutôt correcte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Bitmap bmp = pictureBox1.Image as Bitmap;
                if (bmp != null)
                {
                    Color c = bmp.GetPixel(20, 20);
                }
    après, faut tester par rapport à la taille de l'image que le X et le Y sont à l'intérieur de l'image

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Par défaut
    ça compile bien mais pendant l’exécution il me met nullreferenceexeption


    CODE:

    private void button3_Click(object sender, EventArgs e)
    {
    Bitmap MyBitmap = (Bitmap)pictureBox1.Image;
    Color MyColorToFind;
    Int32 iPosX = 10; // Tu défini la position X et Y du pixel
    Int32 iPosY = 10;
    MyColorToFind = MyBitmap.GetPixel(iPosX, iPosY);
    if (MyColorToFind == System.Drawing.Color.Teal)
    {
    MessageBox.Show("Yes", "My Application", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk);
    }
    }

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Par défaut
    Oui dsl je débute je ne connais pas trop les termes.

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Par défaut
    Tu as raison TheMonz31, l'objet est nul mais qu'est ce que cela signifie?

  10. #10
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    si l'objet Bmp (bitmap) est nul c'est que la ligne :

    Bitmap bmp = picturebox1.Image as bitmap renvoie null dans bmp.

    Explication : tu n'as pas d'image dans ta picturebox...

    donc, si il y a une image d'affichée, c'est que soit tu n'utilises pas une pictureBox, soit, il s'agit d'un composant dans lequel l'affichage de l'image se fait
    dans une méthode "OnPaint()" salement.

    Si tu nous donnes le code complet de ton projet (un zip), je pourrais y jeter un coup d'oeil rapidement.

  11. #11
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    Et si tu débutes, la lecture d'un cours (présent sur ce site) me semble une évidence avant de continuer dans ton projet...

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Par défaut
    Ah je savais pas qu'il y avait un cours je vais voir ca.

    Et je t'ai zipper les documents. Merci beaucoup de ton aide.
    Fichiers attachés Fichiers attachés

  13. #13
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    C'est bien ce que je disais...

    Ta pictureBox ne contient pas d'image puisque tu utilises un CreateGraphics() pour dessiner dedans... ce qui est plutôt vilain.. mais bon...

    Ce que tu pourrais faire pour être plus propre sans casser trop ton code est la chose suivante:

    tu crées un objet Bitmap que tu vas utiliser pour faire des Draw et ensuite, tu affectes ton image à ta pictureBox...

    EN pièce jointe ton projet corrigé... essayes de comprendre ce que j'ai fait...
    Fichiers attachés Fichiers attachés

  14. #14
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Salut,

    @TheMonz : tu préconises quoi comme contrôle pour dessiner à la volée ?
    Le PictureBox me semble pas un si mauvais choix que ça.
    Passer par un fichier temporaire plutôt que travailler sur la mémoire par contre je trouve ça un peu lourd.
    En tout cas l'object Graphics ne permet pas de récupérer directement un pixel
    (il semblerait qu'on puisse passer par un pointeur vers le handle GDI+ du contrôle, mais mes tests ont été infructueux).

  15. #15
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    Comme controle pour dessiner à la volée :

    Un UserControl qui fera le boulot de dessiner directement dedans... et qui offrira une méthode GetImage() par exemple pour récupérer l'image.

    Je ne supporte pas les bouts de code qui dessine en utilisant le "CreateGraphics()"... c'est juste immonde, nul, affreux et inutile.

    Si on veut bien faire les choses, on se fait un petit control et on surcharge la méthode OnPaint() comme ça, le dessin ne se fait que dans le controle
    et ne pollue pas l'application.. et voir ensuite, on peut réutiliser facilement le controle en le mettant dans une librairie séparée...

    En plus, en faisant son propre controle, on peut spécifier le fait de faire du double buffering.. mais bon, là, pour les débutants, on va déjà trop loin !

  16. #16
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Même un débutant peut être intéressé par les bonnes pratiques
    Perso j'ai jamais eu l'occasion de me servir des Graphics (hormis mes tests tout à l'heure), c'est un peu nouveau pour moi.

  17. #17
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    Graphics est une classe qui permet de faire du dessin.. en faite, quand tu surcharges la méthode OnPaint() d'un controle utilisateur, tu récupéres
    l'objet Graphics qui correspond à un objet te donnant accès au contexte graphique de ton controle.

    Avec l'objet Graphics, tu peux ainsi dessiner, etc...

    Avec les Graphics, on peut aussi utiliser l'objet Region qui permet de définir la zone visible d'un controle et la zone qui va répondre au demande de la souris.

    Ainsi, il est assez facile de définir une region à partir d'une suite de segment (un contour, par exemple) et donc de créer une forme ou un controle qui n'aurait pas
    une forme rectangulaire classique, mais ronde, ou elliptique, etc...

    Bref, avec Graphics, Region, et userControle, on peut vraiment faire des choses très puissantes et relativement facilement...

    A noter, qu'avec WPF, on peut aussi faire ce genre de chose, mais plus par outil (type Microsoft Blend) que par code (en tout cas, j'aime autant coder de usercontrol en Winforms qu'en WPF, mais ça, c'est une autre histoire).

  18. #18
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Par défaut
    Merci TheMonz31, j'ai presque tout compris Heureusement qu'il y a des gens comme toi ( pour des gens comme moi ).

  19. #19
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    De rien...

    Parfois, je me dis que je devrais me reconvertir dans l'enseignement de l'informatique !!!

    Bon courage, penses à mettre "résolu" si tu as tout vu

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 02/03/2011, 10h33
  2. Récupérer les coordonnées d'un pixel dans une image
    Par amine52002 dans le forum Langage
    Réponses: 1
    Dernier message: 30/06/2008, 14h52
  3. [Débutant] Récupérer les coordonnées d'un ensemble de pixels dans une matrice
    Par reda24 dans le forum Images
    Réponses: 5
    Dernier message: 01/06/2007, 18h06
  4. Rendre le fond transparent dans une picturebox
    Par fun31 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/01/2005, 18h17
  5. VB6] imprimer le texte afficher dans une picturebox
    Par Persons dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/08/2004, 11h15

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