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

Résolu
guiguidu25 Messages postés 280 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 9 février 2010 - 21 déc. 2008 à 11:53
guiguidu25 Messages postés 280 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

9 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
21 déc. 2008 à 12:17
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
0
MOUSSAOUIAAZIZ Messages postés 48 Date d'inscription samedi 5 août 2006 Statut Membre Dernière intervention 9 novembre 2009
21 déc. 2008 à 18:45
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)

 
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
21 déc. 2008 à 19:02
@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)
0
MOUSSAOUIAAZIZ Messages postés 48 Date d'inscription samedi 5 août 2006 Statut Membre Dernière intervention 9 novembre 2009
21 déc. 2008 à 19:37
Désolée...
0

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

Posez votre question
guiguidu25 Messages postés 280 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 9 février 2010 1
22 déc. 2008 à 11:18
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
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
22 déc. 2008 à 19:14
0
guiguidu25 Messages postés 280 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 9 février 2010 1
23 déc. 2008 à 08:41
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
0
guiguidu25 Messages postés 280 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 9 février 2010 1
24 déc. 2008 à 14:04
Alors là merci !!!!!!!!!
Sa fonctionne impécablement bien ^^
Merci infiniment pour ton aide précieuse !!

Black G - Le futur de Microsoft
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
23 déc. 2008 à 22:20
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
-1
Rejoignez-nous