API GetPixel et GetDC VB.NET

[Résolu]
Signaler
Messages postés
9
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
30 décembre 2009
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour a tous !

voila ma question est super simple et pourtant sa fait 3 jours que je tourne autour !!

Question : Je voudrais obtenir la couleur d'un PIXEL a l'écran, a des coordonnées précis.

-> Exemple : coordonnées X=200 Y=300, la fonction getPixel retourne la couleur du pixel sur le background d'une PICTURE BOX.

Merci beaucoup !

Mickael

13 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
effectivement si X et Y sont dans le mouse_move, tu n'auras plus d'évènement quand tu ne seras plus au dessus de ta zone

d'ailleurs, pourquoi ce code n'est pas indiqué?
code incomplet!


exemple avec un timer à 100ms qui va appeler la procédure selon la position du curseur


    Private Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (ByRef lpPoint As System.Drawing.PointF) As Integer
    Private Declare Function GetDC Lib "user32" (ByVal hwnd As IntPtr) As Integer
    Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Integer, ByVal x As Single, ByVal y As Single) As Integer



    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        'position
        Dim p As System.Drawing.PointF
        GetCursorPos(p)

        'couleur
        Dim iCol As Integer = GetPixel(GetDC(IntPtr.Zero), p.X, p.Y)

        'applique en forçant l'alpha
        PictureBox3.BackColor = System.Drawing.Color.FromArgb(255, Convert.ToInt16(&HFF& And iCol), Convert.ToInt16((&HFF00& And iCol) \ 256), (&HFF0000 And iCol) \ 65536)
    End Sub


++
Messages postés
9
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
30 décembre 2009

Voici mon code :


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 Function CouleurPixel(ByVal x As Long, ByVal y As Long) As Couleur

Dim pixel As Couleur, RGBPx As Long

RGBPx = GetPixel(GetDC(0&), x, y)
pixel.red = &HFF& And RGBPx
pixel.green = (&HFF00& And RGBPx) \ 256
pixel.blue = (&HFF0000 And RGBPx) \ 65536
CouleurPixel = pixel

End Function


Private Sub search_mob()

Dim pixel As Couleur
pixel = CouleurPixel(X, Y)

picture_couleurdelazone.BackColor = RGB(pixel.red, pixel.green, pixel.blue)
'Ici VB me dit "Une valeur de type integer ne peut pas étre converti en system.drawing.color"


End Sub
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
salut,

VB.NET, il faut donc déclarer tes api en fonction

Private Declare Function GetDC Lib "user32" (ByVal hwnd As intptr) As integer
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As integer, ByVal x As integer, ByVal y As integer) As integer

++
[hr]
Messages postés
9
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
30 décembre 2009

oui merci PCPT mais j'ai déja fait sa !

le probléme est :

picture_couleurdelazone.BackColor = RGB(pixel.red, pixel.green, pixel.blue)
'Ici VB me dit "Une valeur de type integer ne peut pas étre converti en system.drawing.color"
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
çà c'est le problème de coder mis vb6 mis vb.net....

backcolor = natif vb.net, type drawing.color
RGB = vb6, qui renvoie un integer

le message d'erreur est logique
donc soit conversion, soit... utilisation vb.net uniquement

picture_couleurdelazone.BackColor = System.Drawing.Color.FromArgb(pixel.red, pixel.green, pixel.blue)
Messages postés
9
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
30 décembre 2009

Merci PCPT, mais un autre probléme apparait ! j'aime la programmation...

enfaite je voudrais capturer la couleur d'un pixel sur l'écran (bureau de windows, autre application, etc..) et ensuite afficher la couleur du pixel dans une picturebox ou autre. pour pouvoir ensuite comparer cette couleur avec une BDD(banque) de couleur.

ci c'est possible, peut tu jeter un œil dans mon code ? STP :)

Merci !
Messages postés
9
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
30 décembre 2009

Utilisation de VB.NET uniquement
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
et?

quel code veux-tu que je regarde, celui ci avec un type COULEUR non déclaré?
avec des fonctions api mal typées?

ou un autre code (bdd) que je ne connais pas?
Messages postés
9
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
30 décembre 2009

Voila : (X et Y sont défini par mouse_event est fonctionne bien)

Private Declare Function GetDC Lib "user32" (ByVal hwnd As IntPtr) As Integer
    Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Integer, ByVal x As Integer, ByVal y As Integer) As Integer

 Public Structure Couleur
        Dim red As Integer
        Dim green As Integer
        Dim blue As Integer
    End Structure

Public Function CouleurPixel(ByVal x As Long, ByVal y As Long) As Couleur

        Dim pixel As Couleur, RGBPx As Long

        RGBPx = GetPixel(GetDC(0&), x, y) 'a verifier
        pixel.red = &HFF& And RGBPx
        pixel.green = (&HFF00& And RGBPx) \ 256
        pixel.blue = (&HFF0000 And RGBPx) \ 65536
        CouleurPixel = pixel


    End Function


 Private Sub search_pixel()

        Dim pixel As Couleur
        pixel = CouleurPixel(X, Y)

        picture_BDD.BackColor = System.Drawing.Color.FromArgb(pixel.red, pixel.green, pixel.blue) ' probléme ICI


    End Sub
Messages postés
9
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
30 décembre 2009

En tout cas je te propose 1 milliards de MERCI !

je réutilisant des éléments que tu ma fourni, mon code fonctionne a merveille.

(les mouse_move sont enregistrer dans une listBox)

'position
        Dim p As System.Drawing.PointF
        GetCursorPos(p)

        'couleur
        Dim iCol As Integer = GetPixel(GetDC(IntPtr.Zero), X, Y)

        'applique en forçant l'alpha
        PictureBox1.BackColor = System.Drawing.Color.FromArgb(255, Convert.ToInt16(&HFF& And iCol), Convert.ToInt16((&HFF00& And iCol) \ 256), (&HFF0000 And iCol) \ 65536)
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
j'accepte ton milliard de mercis ^^

pense aussi à valider ma précédente réponse dans ce cas
bonne soirée ++
Messages postés
1
Date d'inscription
samedi 19 décembre 2009
Statut
Membre
Dernière intervention
2 décembre 2011

slt a tous voila mon suis encore bleu dans tous ca mais je voudrais savoir s il n existe pas de dictionnaire sur les API WINDOWS en VB 6.0 c est a dire qui dit comment chaque API s utilise,les valeurs qu elles renvoient.Merci
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
bonjour, ===>>
LA

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient