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 6 et antérieur Discussion :

[VB6] Comment récupérer la couleur d'un pixel de l'écran?


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 18
    Points : 11
    Points
    11
    Par défaut [VB6] Comment récupérer la couleur d'un pixel de l'écran?
    Bonjour à tous...
    Je débute en visual basic... J'ai commencé il y a six mois, mais je n'ai pas fait de programme très avancé jusqu'ici.
    J'ai eu besoin de faire un programme pour obtenir le code html d'une couleur :
    .

    Maintenant, j'aimerais avoir la possibilité de récupérer la couleur d'un pixel de l'écran, un peu comme l'outil dropper de Paint Shop Pro...

    Si quelqu'un a une idée ?

    Merci d'avance...

  2. #2
    Rédacteur
    Avatar de Halleck
    Homme Profil pro
    Consultant PHP
    Inscrit en
    Mars 2003
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Consultant PHP

    Informations forums :
    Inscription : Mars 2003
    Messages : 597
    Points : 878
    Points
    878
    Par défaut
    Je ne peux pas tester maintenant, mais je suppose que la fonction POINT(x,y) comme sous QBasic permet de faire ce que tu cherches...
    Zend PHP Certified Engineer, Certifié Symfony2
    blog : blog.lepine.pro
    Secrétaire de l'AFUP (Association des Utilisateurs de PHP)

  3. #3
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    En effet Point marche aussi en VB6.
    Il retourne un Long.
    Si tu veux extraire le Rouge, Vert et Bleu de ce long:
    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
    Public Function RedFromRGB(ByVal rgb As Long) _
       As Integer
       ' Le caractère & après &HFF contraint le nombre comme un 
       ' nombre long, empêchant Visual Basic d'évaluer le 
       ' nombre comme une valeur négative. L'opérateur logique 
       ' And est utilisé pour renvoyer des valeurs binaires.
       RedFromRGB = &HFF& And rgb
    End Function
     
    Public Function GreenFromRGB(ByVal rgb As Long) _
       As Integer
       ' Le résultat de l'opération And est divisé par
       ' 256 pour renvoyer la valeur des octets du milieu. 
       ' Notez l'utilisation du diviseur entier.
       GreenFromRGB = (&HFF00& And rgb) \ 256
    End Function
     
    Public Function BlueFromRGB(ByVal rgb As Long) _
       As Integer
       ' Cette fonction fonctionne comme la fonction GreenFromRGB, 
       ' ci-dessus, à l'exception que vous n'avez pas besoin du 
       ' caractère &. Le nombre est déjà un nombre long. Le résultat 
       ' est divisé par 65536 pour obtenir les octets les plus longs.
       BlueFromRGB = (&HFF0000 And rgb) \ 65536
    End Function
    Avant de poser une question, merci de chercher dans les rubriques suivantes:
    FAQ VB
    Tutoriaux VB
    Recherche avancée sur le forum

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Merci à tous, mais... ça n'a pas l'air de fonctionner...

    Je peux extraire les valeurs RGB sans aucun problème grâce aux fonctions qu'hpj a données, mais les couleurs extraites sont soit la couleur de fond de la fenetre (194, 200, 220 que vous pouvez voir sur le screenshot), soit du blanc lorsque j'utilise des coordonnées négatives.

    La fonction ne fonctionne qu'à l'intérieur de la form ? Dans le sens qu'on ne peut pas récupérer la couleur d'un pixel hors de cette form, comme par exemple un pixel du fond d'écran ou d'une autre fenêtre ?
    Et ça m'étonne aussi qu'on n'obtienne qu'une seule couleur...

  5. #5
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Oui la fonction Point ne marche que dans une form de ton projet VB.
    Une seule couleur c'est normal: un pixel ne prend qu'une seule couleur à un instant donné.
    Avant de poser une question, merci de chercher dans les rubriques suivantes:
    FAQ VB
    Tutoriaux VB
    Recherche avancée sur le forum

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Arf ça ne m'arrange pas, je souhaiterais justement récupérer la couleur d'un pixel hors de la form...

    Mais quand je disais "une seule couleur", je parlais du fait que quelle que soit la position que j'indiquais, il me ressortait la même couleur...

  7. #7
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Normal, si tu fais maForm.Point où que tu cliques tu auras la couleur de fond: si tu veux la couleur d'un pixel d'une image ou d'un autre composant il faut appeler la méthode point de l'objet en question.
    Avant de poser une question, merci de chercher dans les rubriques suivantes:
    FAQ VB
    Tutoriaux VB
    Recherche avancée sur le forum

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Ah oui, logique... Donc, si je veux obtenir une couleur hors de la form, ça va être assez compliqué ?

    J'ai pensé à une méthode, dites moi ce que vous en pensez, je ne sais pas si c'est réalisable :
    - On récupère les coordonnées de la souris (j'ai cru apercevoir ça dans la FAQ ou je ne sais plus où, quand j'ai fait des recherches avant de poster sur ce forum... vous voyez, il y a des gens qui lisent les règles :p)
    - On fait une copie d'écran, et on enregistre l'image dans le presse-papiers, ou dans un dossier temporaire. (Va falloir que je trouve comment faire). Y a-t-il un moyen de ne faire la copie que d'une partie de l'écran ?
    - On réserve un emplacement dans la form pour cette image, et on utilise point(x, y) sur cette image...

    ça vous paraît possible/réalisable ? Ou vous auriez une autre méthode ?
    ... merci d'avance

    (les smileys sont excellents, apparemment vous avez pas mal de boulets qui postent... reste plus qu'à espérer que je n'en fasse pas partie ^^)

  9. #9
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Il doit y avoir un moyen avec l'API Windows, mais je pense qu'il te faudrait demander sur le forum de Développement Windows.
    Avant de poser une question, merci de chercher dans les rubriques suivantes:
    FAQ VB
    Tutoriaux VB
    Recherche avancée sur le forum

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Si vous trouvez, dites-le moi, ça m'intéresse ....

  11. #11
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Demande sur le forum Développement Windows.
    Avant de poser une question, merci de chercher dans les rubriques suivantes:
    FAQ VB
    Tutoriaux VB
    Recherche avancée sur le forum

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Bon, à force de trifouilles sur le net, j'ai fini par trouver.

    Premierement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
    Public Declare Function GetCursorPos Lib "user32" (lpPoint As PointAPI) As Long
     
    Public Type PointAPI
    x As Long
    y As Long
    End Type
    Puis, la procédure à appeler pour capturer la couleur d'un pixel de l'écran :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Sub GetPixelScreenColor(ByVal x As Long, ByVal y As Long, ByRef Red As Integer, ByRef Green As Integer, ByRef Blue As Integer)
     
    RGBPx = GetPixel(GetDC(0&), x, y)
     
    Red = &HFF& And RGBPx
    Green = (&HFF00& And RGBPx) \ 256
    Blue = (&HFF0000 And RGBPx) \ 65536
     
    End Sub
    Pour obtenir les coordonnées de la souris, c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim Xpos As Long
    Dim Ypos As Long
    Dim CursPos As PointAPI
     
    GetCursorPos CursPos
    Xpos = CursPos.x
    Ypos = CursPos.y
    Bon, j'espère que ça pourra aider ceux que ça intéressait.... Moi j'ai réussi à obtenir ce que je voulais, mais ce qui me gêne un peu, c'est que j'ai fait quasiment du copier-coller (même si j'ai condensé un peu le code), et que j'aimerais bien comprendre ce que signifie certains trucs.

    Alors si vous pouviez m'expliquer ce que signifie par exemple &HFF& And RGBPx ? Quel est le sens du &, je pensais qu'il servait juste à concaténer une chaîne ?

    Merci d'avance...

  13. #13
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    &Hxxx signifie que xxx représente une valeur hexadécimale.
    Le second & placé à la fin de &Hxxx& signifie que xxx représente une valeur hexdécimale non-signée.
    Et je suppose que RGBPx est l'abbréviation de Red Green Blue PiXel.
    Avant de poser une question, merci de chercher dans les rubriques suivantes:
    FAQ VB
    Tutoriaux VB
    Recherche avancée sur le forum

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Merci hpj... C'est moi qui ait choisi le nom de la variable RGBPx, qui correspond à la couleur du pixel "capturé".

    A quoi sert le And dans &HFF00& And RGBPx ? à additionner les deux valeurs hexadécimales ?

  15. #15
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Non à faire un ET bit à à bit entre les 2 expressions.
    Utilise un peu la touche F1 de ton VB s'il te plait....
    Avant de poser une question, merci de chercher dans les rubriques suivantes:
    FAQ VB
    Tutoriaux VB
    Recherche avancée sur le forum

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

Discussions similaires

  1. [VB6]Comment savoir si un répertoire existe
    Par pendragon dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 30/09/2016, 06h42
  2. [VB6] comment savoir si la commande shell est terminée ?
    Par ghyscharlotte dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 30/07/2003, 19h12
  3. [VB6] Comment Debugger une activeX ??
    Par Berns dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 19/05/2003, 17h34
  4. [VB6] Comment boucler sur des controls d'un form ?
    Par lankviller dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2003, 16h29
  5. [VB6] Comment accéder a la visionneuse d'API ??
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 13/11/2002, 12h57

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