Comment récupérer la valeur d'un pixel d'une picturebox
papanou1965
Messages postés
38
Statut
Membre
-
cs_Le Pivert Messages postés 8437 Statut Contributeur -
cs_Le Pivert Messages postés 8437 Statut Contributeur -
Bonjour, à toutes et tous.
Je débute en Visual Basic 2010 et je voudrais savoir comment je dois m'y prendre
pour avoir la valeur de la couleur d'un pixel aux coordonnées X,Y d'une PictureBox.
Merci déjà de votre aide.
Je débute en Visual Basic 2010 et je voudrais savoir comment je dois m'y prendre
pour avoir la valeur de la couleur d'un pixel aux coordonnées X,Y d'une PictureBox.
Merci déjà de votre aide.
A voir également:
- Comment récupérer la valeur d'un pixel d'une picturebox
- Comment recuperer un message supprimé sur whatsapp - Guide
- Comment recuperer une video sur youtube - Guide
- Comment récupérer un compte facebook piraté - Guide
- Comment récupérer un document dans le presse-papier samsung - Guide
- Récupérer mon compte facebook désactivé - Guide
13 réponses
Bonjour,
En me servant du code donné hier, j'ai fait une recherche de pixel à partir du Form. Je m'explique j'affiche l'image contenu dans la pictureBox dans la BackgroundImage du Form.
Voici le code:
Vois si cela te convient?
En me servant du code donné hier, j'ai fait une recherche de pixel à partir du Form. Je m'explique j'affiche l'image contenu dans la pictureBox dans la BackgroundImage du Form.
Voici le code:
Option Strict On
Public Class Form1
Private Declare Function GetPixel Lib "gdi32" Alias "GetPixel" _
(ByVal hdc As Int32, ByVal x As Int32, ByVal y As Int32) As Int32
Dim pic As Image
Dim x As New DataObject
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim ofd As New OpenFileDialog
With ofd
.Title = "Choisissez une image"
.Filter = "jpeg (*.jpg)|*.jpg|gif (*.gif)|*.gif|tiff (*.tif)|*.tif|bmp (*.bmp)|*.bmp|png (*.png)|*.png"
.FilterIndex = 1
.RestoreDirectory = False
If .ShowDialog() = Windows.Forms.DialogResult.OK Then
pic = New Bitmap(.FileName)
x.SetData(DataFormats.Bitmap, False, pic)
System.Windows.Forms.Clipboard.SetDataObject(x)
Else
MessageBox.Show("Opération annulée par l'utilisateur!", "Ouverture image", MessageBoxButtons.OK, MessageBoxIcon.Information)
Exit Sub
End If
.Dispose()
End With
Button1.Text = "Afficher image"
Button2.Text = "Valeur pixel"
Button3.Text = "Rétablir"
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
x = CType(System.Windows.Forms.Clipboard.GetDataObject, DataObject)
pic = CType(x.GetData(DataFormats.Bitmap), Image)
PictureBox1.Image = pic
PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
Me.BackgroundImage = PictureBox1.Image
Me.BackgroundImageLayout = ImageLayout.Zoom
PictureBox1.Visible = False
End Sub
Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
PictureBox1.Visible = True
Me.BackgroundImage = Nothing
End Sub
Private Sub Form1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
Dim pixelColor As Color
Using gr As Graphics = Graphics.FromHwnd(Me.Handle)
pixelColor = ColorTranslator.FromWin32(GetPixel(CInt(gr.GetHdc()), CInt(e.X), CInt(e.Y)))
End Using
Dim r As Byte = (pixelColor.R)
Dim g As Byte = (pixelColor.G)
Dim b As Byte = (pixelColor.B)
Dim text As String = _
String.Format("red: {0}, green: {1}, blue: {2}", New Object() {r, g, b})
MsgBox(text) 'code RGB
End Sub
End Class
Vois si cela te convient?
Tu as aussi cela, a toi de voir:
Private Sub PictureBox1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
Dim TempBitmap As New Bitmap(PictureBox1.Image)
Dim MyColor As Color
MyColor = TempBitmap.GetPixel(e.X, e.Y)
MessageBox.Show("Pixel x=" & e.X & ", y=" & e.Y & ", color=" & MyColor.ToString, "Color", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
Excuse moi encore dit , mais je me suis mal expliqué.
Le code que tu me donne fonctionne bien , ce n'est pas le soucis.
Mais ce que je désirerai faire , c'est simplement de tester un pixel
au coordonnées fixes X/Y et de mettre tout sa dans une où des variables sans devoir cliquer.
J'ai bien tenté de bricoler sur le deuxième code , mais je n'arrive qu'à avoir
des Erreurs par brouettes entières. Lol
Au secours !
Merci d'avance.
Michel.
Le code que tu me donne fonctionne bien , ce n'est pas le soucis.
Mais ce que je désirerai faire , c'est simplement de tester un pixel
au coordonnées fixes X/Y et de mettre tout sa dans une où des variables sans devoir cliquer.
J'ai bien tenté de bricoler sur le deuxième code , mais je n'arrive qu'à avoir
des Erreurs par brouettes entières. Lol
Au secours !
Merci d'avance.
Michel.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai pas trop de temps maintenant. Je te donne une ébauche. Sinon on verra demain.
A mettre dans un button:
A mettre dans un button:
Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
Dim TempBitmap As New Bitmap(PictureBox1.Image)
Dim MyColor As Color
Dim x As Integer = 100
Dim y As Integer = 100
MyColor = TempBitmap.GetPixel(x, y)
'MessageBox.Show("Pixel x=" & e.X & ", y=" & e.Y & ", color=" & MyColor.ToString, "Color", MessageBoxButtons.OK, MessageBoxIcon.Information)
' Label1.Text = MyColor.ToString
Dim aString As String = MyColor.ToString
Dim rString As String
rString = Mid(aString, 14)
rString = Replace(rString, "]", "")
MsgBox(rString)
Dim bString As String
bString = rString.Substring(9, 3) ' couleur Vert tu fais la suite pour les autres couleurs: 9 début de chaine 3 longueur de chaine à mettre dans une variable
MsgBox(bString)
End Sub
Bon voilà , je n'ai pas de problème pour avoir les 3 valeurs RVB
dans des variables (integer) .
J'ai retourner le code dans tout les sens , mais je n'arrive à rien.
J'en suis toujours réduit à devoir cliquer.
Désolé de te faire avoir des cheveux blancs .
Tu ne saurais pas m'aider S T P .
Merci à demain.
dans des variables (integer) .
J'ai retourner le code dans tout les sens , mais je n'arrive à rien.
J'en suis toujours réduit à devoir cliquer.
Désolé de te faire avoir des cheveux blancs .
Tu ne saurais pas m'aider S T P .
Merci à demain.
Tu le mets dans l'évènement:
Private Sub PictureBox1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
Comme cela à l'entrée de la souris dans la PictureBox cela s'affichera.
Mais tu peux choisir un autre évènement détectable avec la souris si tu ne veux pas cliquer !
Private Sub PictureBox1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
Comme cela à l'entrée de la souris dans la PictureBox cela s'affichera.
Mais tu peux choisir un autre évènement détectable avec la souris si tu ne veux pas cliquer !
Vraiment désolé sait-tu , mais j'ai copier-coller la sub partout.
Pour être sur de ne rien avoir oublié de tester .
Mais cela ne donne rien .
Si tu savais encore m'aider se serais gentil , je me rend bien compte que
j'abuse un peut non?
@ tantôt.
Pour être sur de ne rien avoir oublié de tester .
Mais cela ne donne rien .
Si tu savais encore m'aider se serais gentil , je me rend bien compte que
j'abuse un peut non?
@ tantôt.
Toujours avec le même code, je t'ai mis la sub recupixel dans le bouton afficher avec des MsgBox pour vérifier:
Option Strict On
Public Class Form1
Private Declare Function GetPixel Lib "gdi32" Alias "GetPixel" _
(ByVal hdc As Int32, ByVal x As Int32, ByVal y As Int32) As Int32
Dim pic As Image
Dim x As New DataObject
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim ofd As New OpenFileDialog
With ofd
.Title = "Choisissez une image"
.Filter = "jpeg (*.jpg)|*.jpg|gif (*.gif)|*.gif|tiff (*.tif)|*.tif|bmp (*.bmp)|*.bmp|png (*.png)|*.png"
.FilterIndex = 1
.RestoreDirectory = False
If .ShowDialog() = Windows.Forms.DialogResult.OK Then
pic = New Bitmap(.FileName)
x.SetData(DataFormats.Bitmap, False, pic)
System.Windows.Forms.Clipboard.SetDataObject(x)
Else
MessageBox.Show("Opération annulée par l'utilisateur!", "Ouverture image", MessageBoxButtons.OK, MessageBoxIcon.Information)
Exit Sub
End If
.Dispose()
End With
Button1.Text = "Afficher image"
Button2.Text = "Valeur pixel"
Button3.Text = "Rétablir"
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
x = CType(System.Windows.Forms.Clipboard.GetDataObject, DataObject)
pic = CType(x.GetData(DataFormats.Bitmap), Image)
PictureBox1.Image = pic
PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
recupixel()
End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
Me.BackgroundImage = PictureBox1.Image
Me.BackgroundImageLayout = ImageLayout.Zoom
PictureBox1.Visible = False
End Sub
Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
PictureBox1.Visible = True
Me.BackgroundImage = Nothing
End Sub
Private Sub Form1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
Dim pixelColor As Color
Using gr As Graphics = Graphics.FromHwnd(Me.Handle)
pixelColor = ColorTranslator.FromWin32(GetPixel(CInt(gr.GetHdc()), CInt(e.X), CInt(e.Y)))
End Using
Dim r As Byte = (pixelColor.R)
Dim g As Byte = (pixelColor.G)
Dim b As Byte = (pixelColor.B)
Dim text As String = _
String.Format("red: {0}, green: {1}, blue: {2}", New Object() {r, g, b})
MsgBox(text) 'code RGB
End Sub
Private Sub PictureBox1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
Dim TempBitmap As New Bitmap(PictureBox1.Image)
Dim MyColor As Color
MyColor = TempBitmap.GetPixel(e.X, e.Y)
'MessageBox.Show("Pixel x=" & e.X & ", y=" & e.Y & ", color=" & MyColor.ToString, "Color", MessageBoxButtons.OK, MessageBoxIcon.Information)
Label1.Text = MyColor.ToString
Dim aString As String = MyColor.ToString
Dim rString As String
rString = Mid(aString, 14)
' rString = Replace(rString, ",", " ")
rString = Replace(rString, "]", "")
MsgBox(rString)
Dim bString As String
bString = rString.Substring(9, 3) ' bString = "String"
MsgBox(bString)
End Sub
Private Sub recupixel()
Dim TempBitmap As New Bitmap(PictureBox1.Image)
Dim MyColor As Color
Dim x As Integer = 100
Dim y As Integer = 100
Dim vert As String
Dim rouge As String
Dim bleu As String
MyColor = TempBitmap.GetPixel(x, y)
'MessageBox.Show("Pixel x=" & e.X & ", y=" & e.Y & ", color=" & MyColor.ToString, "Color", MessageBoxButtons.OK, MessageBoxIcon.Information)
Dim aString As String = MyColor.ToString
Dim rString As String
rString = Mid(aString, 14)
rString = Replace(rString, "]", "")
rString = Replace(rString, ",", " ")
MsgBox(rString)
rouge = rString.Substring(3, 3) ' couleur rouge
MsgBox(rouge)
vert = rString.Substring(9, 3) ' couleur Vert
MsgBox(vert)
bleu = rString.Substring(16, 3) ' couleur bleu
MsgBox(bleu)
End Sub
End Class
Super , Un grand merci à toi.
J'ai assemblé des bouts de tes codes pour n'en faire qu'un seul.
Et sa tourne , maintenant je vais pouvoir voler de mes propres ailes
pour le reste du projet .
Encore merci à toi et bonne continuation.
Michel
P.S.
Pour les débutants en VB 2010 Express , voici un site bien fait.
Je te le met toujours , sa pourrais servir à des newbee(s) comme moi.
J'ai assemblé des bouts de tes codes pour n'en faire qu'un seul.
Et sa tourne , maintenant je vais pouvoir voler de mes propres ailes
pour le reste du projet .
Encore merci à toi et bonne continuation.
Michel
P.S.
Pour les débutants en VB 2010 Express , voici un site bien fait.
http://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-vb-net/historique-et-visual-basic-express-2010Désolé je n'ai pas trouvé les quote(s) pour les URL il faudra copier-coller.
Je te le met toujours , sa pourrais servir à des newbee(s) comme moi.
Je me suis aperçu que si le rouge n'avait que 2 chiffres et le vert idem cela générait une erreur .
Voici le code rectifié:
Les variables:
sont a déclarer au début du projets
Voici le code rectifié:
Private Sub recupixel()
Dim TempBitmap As New Bitmap(PictureBox1.Image)
Dim MyColor As Color
Dim x As Integer = 100
Dim y As Integer = 100
MyColor = TempBitmap.GetPixel(x, y)
'MessageBox.Show("Pixel x=" & e.X & ", y=" & e.Y & ", color=" & MyColor.ToString, "Color", MessageBoxButtons.OK, MessageBoxIcon.Information)
Dim aString As String = MyColor.ToString
Dim rString As String
rString = Mid(aString, 14)
rString = Replace(rString, "]", " ")
MsgBox(rString)
Dim s As String = rString
Dim separateur As Char = CChar(",")
Dim nom() As String
nom = s.Split(separateur)
nom(0) = Replace(nom(0), "R=", "")
rouge = nom(0)
MsgBox(rouge)
nom(1) = Replace(nom(1), "G=", "")
vert = nom(1)
MsgBox(vert)
nom(2) = Replace(nom(2), "B=", "")
bleu = nom(2)
MsgBox(bleu)
End Sub
Les variables:
Dim vert As String
Dim rouge As String
Dim bleu As String
sont a déclarer au début du projets