Connaître la couleur d'un pixel à l'écran [vb.net] [Résolu]

Messages postés
281
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
9 février 2010
- - Dernière réponse : guiguidu25
Messages postés
281
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
9 février 2010
- 24 déc. 2008 à 14:04
Bonjour à tous, j'aimerais savoir si il existe une instruction qui permette d'obtenir la couleur d'un pixel précis à l'écran.
Si oui, comment faire ?
Merci d'avance !

Black G - Le futur de Microsoft
Afficher la suite 

9 réponses

Meilleure réponse
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
21
3
Merci
Voila la solution
Tu cliques sur la forme et tu deplace la souris sur l'ecran et ta form
prend la couleur sous la souris.

Il faut une form et un controle timer.



Je ne vois pas quelle fonction est intraduisible.
Le code était je l'admet un peu complexe a traduit mais c'était pas insurmontable ;-)

J'ai les memes focntions, sauf que le code de recup de la couleur
qui etait foireux (a moins que je l'avais mal traduis) donc je l'ai refais.

'API
Private Declare Function GetPixel Lib "gdi32" Alias "GetPixel" (ByVal hdc As IntPtr, ByVal X As Int32, ByVal Y As Int32) As Int32
Private Declare Function GetDC Lib "user32" (ByVal hWnd As IntPtr) As IntPtr

'variable de l'handle du bureau
Private desktopDc As IntPtr

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

'recupere le bureau
desktopDc = GetDC(IntPtr.Zero)

end sub

Private Sub Form1_MouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseClick
'lancement sur clique souris
Timer1.Enabled = Not Timer1.Enabled
End Sub


'prend la couleur a chaque tick du timer
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

Dim pt As Point = MousePosition()
Dim colorVal As Int32 = GetPixel(desktopDc, CType(pt.X, Int16), CType(pt.Y, Int16))
Dim r As Int32 = colorVal And &HFF
Dim g As Int32 = (colorVal And &HFF00) >> 8
Dim b As Int32 = (colorVal And &HFF0000) >> 16
Dim c As Color = Color.FromArgb(r, g, b)
'change la couleur de fond de la form
Me.BackColor = c

End Sub

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 137 internautes nous ont dit merci ce mois-ci

Commenter la réponse de nhervagault
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
21
0
Merci
Salut,

Je pense qu'il faut passer par les API.

Dans le source suivant il y a la reponse (je crois)
http://www.vbfrance.com/codes/CONTROLES-COLOR-PICKER-WHEEL-COLOR-PICKER-SCREEN-COLOR_48207.aspx
Commenter la réponse de nhervagault
Messages postés
48
Date d'inscription
samedi 5 août 2006
Statut
Membre
Dernière intervention
9 novembre 2009
0
Merci
Salut ;


Pour  ce la tu doit faire une capture d’écran a l’aide de cette fonction :




 



Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




Et puis dans ton projet tu met un « picturebox »



 





Me.WindowState = 1  

‘minimiser la forme





DoEvents





Call keybd_event(vbKeySnapshot, 0, 0, 0) 

‘faire une capture d’écran





DoEvents





Picture1.Picture = Clipboard.GetData(vbCFBitmap) 

‘récupérer dans un   picturebox





Me.WindowState = 2  
‘ maximiser la forme





resultat = Picture1.Point(x, y)

 
Commenter la réponse de MOUSSAOUIAAZIZ
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
21
0
Merci
@MOUSSAOUIAAZIZ c'est du vb6 que tu as mis
et la question est demandée en vb.net

en dotnet, il ne semble pas avoir besoin d'API
la simple fonction getpixel suffit.

http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.getpixel.aspx


Des infos en c# (http://www.charlespetzold.com/pwcs/ReadingPixelsFromTheScreen.html)
Commenter la réponse de nhervagault
Messages postés
48
Date d'inscription
samedi 5 août 2006
Statut
Membre
Dernière intervention
9 novembre 2009
0
Merci
Désolée...
Commenter la réponse de MOUSSAOUIAAZIZ
Messages postés
281
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
9 février 2010
1
0
Merci
Merci pour vos conseils à tous les deux
J'ai juste un petit problème : d'abord effectivement le vb6 ne m'est d'aucun utilité mais merci de m'avoir proposé tout de même... Ensuite je dois préciser que le pixel en question ne se trouve pas sur une image mais dans un contrôle WebBrowser. La source que tu m'as donné nhervagault ne m'a malheureusement pas apporté de réponse précise à mon cas

Merci tout de même d'avoir répondu !
Black G - Le futur de Microsoft
Commenter la réponse de guiguidu25
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
21
Commenter la réponse de nhervagault
Messages postés
281
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
9 février 2010
1
0
Merci
Merci, j'ai essayé d'adapter le code C# en VB.net seulement il s'avère que la fonction la plus importante du programme en C# n'este pas sur VB.net.
Si c'est impossible à réaliser (ce qui m'étonne pourtant =// ), j'essaierais de faire autrement... Dommage

Black G - Le futur de Microsoft
Commenter la réponse de guiguidu25
Messages postés
281
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
9 février 2010
1
0
Merci
Alors là merci !!!!!!!!!
Sa fonctionne impécablement bien ^^
Merci infiniment pour ton aide précieuse !!

Black G - Le futur de Microsoft
Commenter la réponse de guiguidu25