Meilleur auteur de réponses
Comment lire un pixel sur sa form ?

Question
-
Bonjour,
Comment lire un pixel sur sa form je vous prie, car j'ai fait ce qui suit mais c'est loin de fonctionner, si vous pouvez m'écrire ce qu'il faut changer, merci ?
Dim xx as long Dim yy as long ' Sub Form2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click Dim pixel As New Bitmap(Me) Dim pixelColor As Color = pixel.GetPixel(xx, yy) End Sub
C'est la variable "pixel As" qu'il ne veut pas digérer ?
Dim pixel As New Bitmap(Me)
Cordialement.
Joseph Attila PUSZTAY
EhJoe Logiciels Romans Ecrire
Réponses
-
Bonjour,
Voici un autre moyen sans utiliser une image :
Private Declare Function GetPixel Lib "gdi32" Alias "GetPixel" (ByVal hdc As Int32, ByVal x As Int32, ByVal y As Int32) As Int32 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim pixelColor As Color Using g As Graphics = Graphics.FromHwnd(Me.Handle) pixelColor = ColorTranslator.FromWin32(GetPixel(g.GetHdc(), x, y)) End Using End Sub
Cordialement
Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr- Proposé comme réponse Gabriel MongeonModerator mardi 17 août 2010 18:29
- Marqué comme réponse EhJoe mercredi 18 août 2010 12:52
-
Dans le code que tu envoies tu as remplacé la taille du bitmap et la position du pixel que j'avais précisé par les coordonnées du curseur de la souris . C'est pour cela que tu obtiens une erreur.
Il faut laisser Bitmap(1,1) car il s'agit simplement de préciser une taille pour une image temporaire : autant que cette image soit la plus petite possible.
Le GetPixel(0,0) permet d'obtenir le premier de cette image pixel et donc celui sous le cursuer de la souris.
Les coordonnées de la souris ne sont utilisées que dans la méthode CopyFromScreen (e.Location )
Donc en fait reprend le code comme indiqué et cela devrait fonctionner :)
Pour les couleurs ARBG, tu peux utiliser les propriétés de la classe couleur comme ce que tu as commencé à écrire.
Using bmp As New Bitmap(1, 1) Using g As Graphics = Graphics.FromImage(bmp) g.CopyFromScreen(CType(sender, Control).PointToScreen(e.Location), Point.Empty, bmp.Size) Dim color As Color = bmp.GetPixel(0, 0) MessageBox.Show(String.Format("Couleur A:{0},R:{1},G:{2},B:{3}", color.A, color.R, color.G, color.B)) End Using End Using
- Marqué comme réponse EhJoe mercredi 18 août 2010 17:45
Toutes les réponses
-
Bonjour,
il est possible de copier l'affichage à l'écran via la méthode CopyFromScreen. Pour récupérer la couleur d'un pixel, on peut copier qu'une toute petite partie de l'image ( 1x1 pixel ) . A pertir de l'image obtenue on récupère le pixel 0,0 pour obtenir la couleur.
Voici un exemple fonctionnant sur l'event click d'une form.
CordialementPrivate Sub Form1_MouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseClick Using bmp As New Bitmap(1, 1) Using g As Graphics = Graphics.FromImage(bmp) g.CopyFromScreen(CType(sender, Control).PointToScreen(e.Location), Point.Empty, bmp.Size) MessageBox.Show(bmp.GetPixel(0, 0).ToString()) End Using End Using End Sub
-
Bonjour,
Voici un autre moyen sans utiliser une image :
Private Declare Function GetPixel Lib "gdi32" Alias "GetPixel" (ByVal hdc As Int32, ByVal x As Int32, ByVal y As Int32) As Int32 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim pixelColor As Color Using g As Graphics = Graphics.FromHwnd(Me.Handle) pixelColor = ColorTranslator.FromWin32(GetPixel(g.GetHdc(), x, y)) End Using End Sub
Cordialement
Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr- Proposé comme réponse Gabriel MongeonModerator mardi 17 août 2010 18:29
- Marqué comme réponse EhJoe mercredi 18 août 2010 12:52
-
Nikho,
Le code de la couleur ne passe pas, voici :
Sub Form2_MouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseClick If e.Button <> Windows.Forms.MouseButtons.Left Then Exit Sub ' pipette If copie = False Or okZone = False Then Exit Sub Using bmp As New Bitmap(e.X, e.Y) Using g As Graphics = Graphics.FromImage(bmp) g.CopyFromScreen(CType(sender, Control).PointToScreen(e.Location), Point.Empty, bmp.Size) MessageBox.Show(bmp.GetPixel(e.X, e.Y).ToString()) 'HScrollBar4.Value = pixelColor.A 'HScrollBar1.Value = pixelColor.r 'HScrollBar2.Value = pixelColor.G 'HScrollBar3.Value = pixelColor.B 'Call melange() End Using End Using End Sub
Il plante ici :
MessageBox.Show(bmp.GetPixel(e.X, e.Y).ToString())
Avec un message qui dit :
Le paramètre doit être positif et inférieur à la largeur. Nom du paramètre : x
???
Il faut aussi que je puisse récupérer les couleurs (A, RGB), voir le reste de mon code en dessous de l'erreur ?
Cordialement.
Joseph Attila PUSZTAY
EhJoe Logiciels Romans Ecrire -
Dans le code que tu envoies tu as remplacé la taille du bitmap et la position du pixel que j'avais précisé par les coordonnées du curseur de la souris . C'est pour cela que tu obtiens une erreur.
Il faut laisser Bitmap(1,1) car il s'agit simplement de préciser une taille pour une image temporaire : autant que cette image soit la plus petite possible.
Le GetPixel(0,0) permet d'obtenir le premier de cette image pixel et donc celui sous le cursuer de la souris.
Les coordonnées de la souris ne sont utilisées que dans la méthode CopyFromScreen (e.Location )
Donc en fait reprend le code comme indiqué et cela devrait fonctionner :)
Pour les couleurs ARBG, tu peux utiliser les propriétés de la classe couleur comme ce que tu as commencé à écrire.
Using bmp As New Bitmap(1, 1) Using g As Graphics = Graphics.FromImage(bmp) g.CopyFromScreen(CType(sender, Control).PointToScreen(e.Location), Point.Empty, bmp.Size) Dim color As Color = bmp.GetPixel(0, 0) MessageBox.Show(String.Format("Couleur A:{0},R:{1},G:{2},B:{3}", color.A, color.R, color.G, color.B)) End Using End Using
- Marqué comme réponse EhJoe mercredi 18 août 2010 17:45