API GetPixel et GetDC VB.NET [Résolu]

neonecc 9 Messages postés mardi 26 décembre 2000Date d'inscription 30 décembre 2009 Dernière intervention - 30 déc. 2009 à 14:47 - Dernière réponse : ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

13 réponses

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


++

Merci PCPT 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de PCPT
neonecc 9 Messages postés mardi 26 décembre 2000Date d'inscription 30 décembre 2009 Dernière intervention - 30 déc. 2009 à 14:50
0
Merci
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
Commenter la réponse de neonecc
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 30 déc. 2009 à 15:09
0
Merci
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]
Commenter la réponse de PCPT
neonecc 9 Messages postés mardi 26 décembre 2000Date d'inscription 30 décembre 2009 Dernière intervention - 30 déc. 2009 à 15:15
0
Merci
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"
Commenter la réponse de neonecc
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 30 déc. 2009 à 15:44
0
Merci
çà 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)
Commenter la réponse de PCPT
neonecc 9 Messages postés mardi 26 décembre 2000Date d'inscription 30 décembre 2009 Dernière intervention - 30 déc. 2009 à 15:55
0
Merci
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 !
Commenter la réponse de neonecc
neonecc 9 Messages postés mardi 26 décembre 2000Date d'inscription 30 décembre 2009 Dernière intervention - 30 déc. 2009 à 17:08
0
Merci
Utilisation de VB.NET uniquement
Commenter la réponse de neonecc
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 30 déc. 2009 à 17:14
0
Merci
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?
Commenter la réponse de PCPT
neonecc 9 Messages postés mardi 26 décembre 2000Date d'inscription 30 décembre 2009 Dernière intervention - 30 déc. 2009 à 18:05
0
Merci
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
Commenter la réponse de neonecc
neonecc 9 Messages postés mardi 26 décembre 2000Date d'inscription 30 décembre 2009 Dernière intervention - 30 déc. 2009 à 19:12
0
Merci
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)
Commenter la réponse de neonecc
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 30 déc. 2009 à 19:14
0
Merci
j'accepte ton milliard de mercis ^^

pense aussi à valider ma précédente réponse dans ce cas
bonne soirée ++
Commenter la réponse de PCPT
landry161 1 Messages postés samedi 19 décembre 2009Date d'inscription 2 décembre 2011 Dernière intervention - 2 déc. 2011 à 13:33
0
Merci
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
Commenter la réponse de landry161
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 2 déc. 2011 à 14:05
0
Merci
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
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.