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

Windows Forms Discussion :

[VB.NET]Comment recupérer la couleur d'un pixel de l'Ecran ? [FAQ]


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    neant
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : neant

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Points : 27
    Points
    27
    Par défaut [VB.NET]Comment recupérer la couleur d'un pixel de l'Ecran ?
    Bonjour,

    Je suis entrain de faire un logiciel et je voudrais récuperer la couleur d'un pixel de mon écran.
    Le type de l'objet où je doit récuperer cette couleur est un "scattergraph" (objet de chez NationalInstrument).
    Je connais la fonction Bitmap.Getpixel(x,y) mais je ne sais comment l'utiliser car mon objet n'est pas un Bitmap...

    Comment dois je procéder?
    Merci d'avance

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    le principal est que ce soit un control ayant un Handle, alors tu peux directement utiliser l'API
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <DllImport("gdi32.dll")> _
    Shared Function GetPixel(ByVal hdc As IntPtr, ByVal nXPos As Integer, ByVal nYPos As Integer) As System.UInt32
    End Function
    Tu récupère une valeur representant RGB

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    neant
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : neant

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Points : 27
    Points
    27
    Par défaut
    OK, merci de m'avoir repondu aussi rapidement.
    Je vais travailler dessus...

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    neant
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : neant

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Points : 27
    Points
    27
    Par défaut
    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Declare Function GetPixel Lib "gdi32.dll" (ByVal hdc As IntPtr, ByVal nXPos As Integer, ByVal nYPos As Integer) As UInt64
     
    ...
     
    Private Sub Graph_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Graph.MouseDown
            Dim a
            a = GetPixel(Graph.Handle, e.X, e.Y)
            MsgBox(a.ToString())
     
        End Sub
    Cela ne fonctionne pas, la fonction me renvoie un nombre toujours different même lorsque je clic des pixels de meme couleur.
    D'ou cela peut il provenir ?

  5. #5
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    je ne sais pas mais pourquoi es-tu passé un UInt32 à un UInt64 :
    De plus prends de bonnes habitudes pour tes typages, je te suggères d'ajouter en haut de ta page de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit On
    Option Strict On
    çà te forceras un peu la main

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub Graph_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Graph.MouseDown 
      Dim a As Integer = Convert.ToInt32(GetPixel(Graph.Handle, e.X, e.Y))
      MsgBox(Color.FromArgb(a).ToString()) 
    End Sub

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    neant
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : neant

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Points : 27
    Points
    27
    Par défaut
    L'instruction "Convert.ToInt32" génère une exception d'overflow...
    Du coup je tourne encore en rond.

  7. #7
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par cyrcroix
    L'instruction "Convert.ToInt32" génère une exception d'overflow...
    Du coup je tourne encore en rond.
    parce que tu as maintenu le UInt64 c'est çà :

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    neant
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : neant

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Points : 27
    Points
    27
    Par défaut
    Non non, j'ai bien remis un UInt32 comme tu me l'avais fait.

  9. #9
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Et si tu passes directement le UInt32
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub Graph_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Graph.MouseDown 
      Dim Argb As UInt32 = GetPixel(Graph.Handle, e.X, e.Y)
      MsgBox(Color.FromArgb(Argb).ToString()) 
    End Sub

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    neant
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : neant

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Points : 27
    Points
    27
    Par défaut
    J'ai déjà essayé cela mais il me dit qu'il ne veut pas convertir un UInt32 en Integer.

  11. #11
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Dans ce cas tentes cette transformation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Declare Function GetPixel Lib "gdi32.dll" (ByVal hdc As IntPtr, ByVal nXPos As Integer, ByVal nYPos As Integer) As Int32
     
    Private Sub Graph_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Graph.MouseDown 
      Dim Argb As Integer = GetPixel(Graph.Handle, e.X, e.Y) 
      MsgBox(Color.FromArgb(Argb).ToString()) 
    End Sub

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    neant
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : neant

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Points : 27
    Points
    27
    Par défaut
    bon maintenant, plus d'exception générée mais par contre la fonction me renvoie toujours 255 255 255 255 indépendement de la couleur visée...
    Ca ne sera pourrai pas être à cause du graph.handle?

  13. #13
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    c'est même certain, car il doit renvoyé des valeur supérieures au Byte
    je vais un chercher de mon côté s'il n'y a pas une autre manière de proceder qui nous permettrait de recupérer par exemple un tableau de byte
    @+

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    neant
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : neant

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Points : 27
    Points
    27
    Par défaut
    ok, merci beaucoup pour votre aide.

  15. #15
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    peux-tu m'expliquer un peu ce qu'est un scattergraph, quelles sont les propriétés qu'il expose : une Matrix par exemple ou je sais quoi qui permettrait d'en créer une Image
    oh mais j'y pense que donnerait un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim bmp As Bitmap = Image.FromHbitmap(Graph.Handle)

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    neant
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : neant

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Points : 27
    Points
    27
    Par défaut
    En fait, c un objet qui me trace des courbes juste en lui passant un tableux de points, il permet aussi de faire très aisément des zooms sur la courbe.
    Je trouve pas la doc que j'avais...
    Ta ligne de code ne fonctionne pas, ca serait trop facile

  17. #17
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par cyrcroix
    En fait, c un objet qui me trace des courbes juste en lui passant un tableux de points, il permet aussi de faire très aisément des zooms sur la courbe.
    Je trouve pas la doc que j'avais...
    Ta ligne de code ne fonctionne pas, ca serait trop facile
    Oui mais ce contrôle est peut être un derivé de PictureBox, il n'a pas une propriété Image ou equivalent , l'intellisense ne te permet pas de voir ses membres :

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    neant
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : neant

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Points : 27
    Points
    27
    Par défaut
    sisi mais je n'ai rien trouver qui ressemble à transformer cet objet en une image bitmap.
    Mais je ne suis pas un expert...
    C'est d'ailleurs pourquoi je demande de l'aide.

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    neant
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : neant

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Points : 27
    Points
    27
    Par défaut
    Mais, il n existerai pas une fonction qui prendrai directement la couleur d'un pixel n'importe où sur l'écran de l'ordinateur indépendante du code?

  20. #20
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    si le C# ne te derange pas il y a un exemple là un peu plus complet que ce que l'on a fait
    http://www.pinvoke.net/default.aspx/gdi32/GetPixel.html
    la traduction ne devrait pas trops te poser de souci il y a juste une API supplementaire à gérer

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/11/2007, 22h23
  2. Réponses: 2
    Dernier message: 19/08/2006, 12h47
  3. [VB.NET] Comment remplacer une couleur par une autre?
    Par jazz matazz dans le forum VB.NET
    Réponses: 5
    Dernier message: 11/02/2006, 14h29
  4. Réponses: 4
    Dernier message: 26/07/2005, 10h45
  5. [VB6] Comment récupérer la couleur d'un pixel de l'écran?
    Par Taurëndil dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 26/03/2004, 08h02

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