API GetPixel et GetDC VB.NET

Résolu
neonecc Messages postés 9 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 30 décembre 2009 - 30 déc. 2009 à 14:47
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 2 déc. 2011 à 14:05
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
A voir également:

13 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
30 déc. 2009 à 19:01
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


++
3
neonecc Messages postés 9 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 30 décembre 2009
30 déc. 2009 à 14:50
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
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
30 déc. 2009 à 15:09
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]
0
neonecc Messages postés 9 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 30 décembre 2009
30 déc. 2009 à 15:15
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"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
30 déc. 2009 à 15:44
çà 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)
0
neonecc Messages postés 9 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 30 décembre 2009
30 déc. 2009 à 15:55
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 !
0
neonecc Messages postés 9 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 30 décembre 2009
30 déc. 2009 à 17:08
Utilisation de VB.NET uniquement
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
30 déc. 2009 à 17:14
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?
0
neonecc Messages postés 9 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 30 décembre 2009
30 déc. 2009 à 18:05
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
0
neonecc Messages postés 9 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 30 décembre 2009
30 déc. 2009 à 19:12
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)
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
30 déc. 2009 à 19:14
j'accepte ton milliard de mercis ^^

pense aussi à valider ma précédente réponse dans ce cas
bonne soirée ++
0
landry161 Messages postés 1 Date d'inscription samedi 19 décembre 2009 Statut Membre Dernière intervention 2 décembre 2011
2 déc. 2011 à 13:33
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 déc. 2011 à 14:05
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
0
Rejoignez-nous