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

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

Répondre au sujet
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 23 déc. 2008 à 22:20
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de nhervagault
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 21 déc. 2008 à 12:17
0
Utile
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
MOUSSAOUIAAZIZ 48 Messages postés samedi 5 août 2006Date d'inscription 9 novembre 2009 Dernière intervention - 21 déc. 2008 à 18:45
0
Utile
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
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 21 déc. 2008 à 19:02
0
Utile
@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
MOUSSAOUIAAZIZ 48 Messages postés samedi 5 août 2006Date d'inscription 9 novembre 2009 Dernière intervention - 21 déc. 2008 à 19:37
0
Utile
Désolée...
Commenter la réponse de MOUSSAOUIAAZIZ
guiguidu25 281 Messages postés samedi 6 mai 2006Date d'inscription 9 février 2010 Dernière intervention - 22 déc. 2008 à 11:18
0
Utile
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
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 22 déc. 2008 à 19:14
Commenter la réponse de nhervagault
guiguidu25 281 Messages postés samedi 6 mai 2006Date d'inscription 9 février 2010 Dernière intervention - 23 déc. 2008 à 08:41
0
Utile
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
guiguidu25 281 Messages postés samedi 6 mai 2006Date d'inscription 9 février 2010 Dernière intervention - 24 déc. 2008 à 14:04
0
Utile
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.