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

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

Votre réponse

9 réponses

Meilleure réponse
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Dernière intervention
15 juillet 2011
- 23 déc. 2008 à 22:20
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

Merci nhervagault 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de nhervagault
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Dernière intervention
15 juillet 2011
- 21 déc. 2008 à 12:17
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
Dernière intervention
9 novembre 2009
- 21 déc. 2008 à 18:45
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
Dernière intervention
15 juillet 2011
- 21 déc. 2008 à 19:02
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
Dernière intervention
9 novembre 2009
- 21 déc. 2008 à 19:37
0
Merci
Désolée...
Commenter la réponse de MOUSSAOUIAAZIZ
Messages postés
281
Date d'inscription
samedi 6 mai 2006
Dernière intervention
9 février 2010
- 22 déc. 2008 à 11:18
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
Dernière intervention
15 juillet 2011
- 22 déc. 2008 à 19:14
Commenter la réponse de nhervagault
Messages postés
281
Date d'inscription
samedi 6 mai 2006
Dernière intervention
9 février 2010
- 23 déc. 2008 à 08:41
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
Dernière intervention
9 février 2010
- 24 déc. 2008 à 14:04
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

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.