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 :

Obtenir couleur d'un pixel


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 44
    Points : 36
    Points
    36
    Par défaut Obtenir couleur d'un pixel
    Bonsoir !

    Je débute dans le C# et après m'être intéressé à la manip' de fichiers, penche du coté de l'automatisation, à savoir simulation de touches, clics and co.

    Je rencontre problème vis-à-vis de l'obtention d'un code couleur d'un pixel par rapport à une coordonnée sur l'écran (afin de faire des conditions, si tel pixel a telle valeur, alors je clique ...).

    J'ai cherché un peu partout sur Google autant en Français qu'Anglais et je ne trouve rien de bien convaincant ni de très clair pour moi ...

    Merci par avance !

  2. #2
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Bonjour,

    Je sais pas s'il existe une méthode plus simple, mais peut être en créant une capture d'écran à un instant X (lors du clic sur le bouton de ta souris par exemple, de la charger dans un objet Bitmap puis d'utiliser la méthode GetPixel().

    Voici la méthode pour récupérer la couleur d'un pixel à une certaine position dans un bitmap :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Bitmap Img = new Bitmap("test.jpg" );
     
    Color pixelColor = myBitmap.GetPixel(50, 50);

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 44
    Points : 36
    Points
    36
    Par défaut
    Yep j'avais vu cette façon, mais ayant besoin de récupérer beaucoup de pixels, cela n'impactera pas les ressources système à force ?

    Et quel est le morceaux a taper pour récupérer un screen d'écran ?
    Merci beaucoup !

  4. #4
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Yep,

    J'ai trouvé ce code sur le net j'ai pas le temps de le tester la de suite mais cela me semble cohérent. En fait tu crée un bipmap en récupérant les coordonnées de ton écran en passant par la classe Screen. Et à l'aide d'un objet Graphics tu effectues la copie d'écran.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    using (Bitmap bmpScreenCapture = new Bitmap(Screen.PrimaryScreen.Bounds.Width, 
                                                Screen.PrimaryScreen.Bounds.Height))
    {
        using (Graphics g = Graphics.FromImage(bmpScreenCapture))
        {
            g.CopyFromScreen(Screen.PrimaryScreen.Bounds.X,
                             Screen.PrimaryScreen.Bounds.Y,
                             0, 0,
                             bmpScreenCapture.Size,
                             CopyPixelOperation.SourceCopy);
        }
    }
    Maintenant il y a peut-être mieux comme solution mais je n'ai rien trouvé d'autre pour l'instant.

  5. #5
    Membre émérite Avatar de meziantou
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Points : 2 439
    Points
    2 439
    Par défaut
    Source : http://www.pinvoke.net/default.aspx/gdi32/GetPixel.html

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
      using System;
      using System.Drawing;
      using System.Runtime.InteropServices;
     
      sealed class Win32
      {
          [DllImport("user32.dll")]
          static extern IntPtr GetDC(IntPtr hwnd);
     
          [DllImport("user32.dll")]
          static extern Int32 ReleaseDC(IntPtr hwnd, IntPtr hdc);
     
          [DllImport("gdi32.dll")]
          static extern uint GetPixel(IntPtr hdc, int nXPos, int nYPos);
     
          static public System.Drawing.Color GetPixelColor(int x, int y)
          {
           IntPtr hdc = GetDC(IntPtr.Zero);
           uint pixel = GetPixel(hdc, x, y);
           ReleaseDC(IntPtr.Zero, hdc);
           Color color = Color.FromArgb((int)(pixel & 0x000000FF),
                        (int)(pixel & 0x0000FF00) >> 8,
                        (int)(pixel & 0x00FF0000) >> 16);
           return color;
          }
       }

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 44
    Points : 36
    Points
    36
    Par défaut
    Merci à vous, j'essaierai ces deux codes et ferai un retour.

Discussions similaires

  1. [À télécharger] Obtenir la couleur d'un pixel à l'écran
    Par SfJ5Rpw8 dans le forum Vos téléchargements VB6
    Réponses: 0
    Dernier message: 14/11/2010, 17h50
  2. Réponses: 2
    Dernier message: 14/06/2008, 00h21
  3. Obtenir la couleur d'un pixel d'une PictureBox
    Par avigeilpro dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 30/06/2006, 22h17
  4. Réponses: 14
    Dernier message: 04/01/2006, 14h40
  5. Obtenir la couleur d'un pixel
    Par GLDavid dans le forum OpenGL
    Réponses: 2
    Dernier message: 09/03/2004, 18h21

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