Analyse des couleurs [Résolu]

Cluny265 7 Messages postés samedi 14 avril 2012Date d'inscription 12 décembre 2013 Dernière intervention - 5 déc. 2013 à 16:10 - Dernière réponse : Cluny265 7 Messages postés samedi 14 avril 2012Date d'inscription 12 décembre 2013 Dernière intervention
- 8 déc. 2013 à 11:54
Bonjour,
Quelqu'un connaît-il les codes pour connaître la décomposition en RVB du pixel sous le pointeur ?
Cette possibilité existe puisqu'elle est utilisée par Windows lors de la création de couleur. C'est le contraire de Color.FromArgb(R,V,B).
Afficher la suite 

14 réponses

Répondre au sujet
Cluny265 7 Messages postés samedi 14 avril 2012Date d'inscription 12 décembre 2013 Dernière intervention - 5 déc. 2013 à 16:11
0
Utile
Je travaille avec VB2010
Commenter la réponse de Cluny265
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 5/12/2013 à 17:11
0
Utile
Bonjour, Sans personnellement rien connaître de VB.Net (je développe sous VB6), j'ouvre MSDN sur le mot Color, examine ses méthodes et vois que l'inverse de la méthode Color.FromArgb est la méthode Color.ToArgb. A vrai dire, je n'en suis pas étonné, From voulant dire depuis et To voulant dire vers (non ?)

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Commenter la réponse de ucfoutu
Cluny265 7 Messages postés samedi 14 avril 2012Date d'inscription 12 décembre 2013 Dernière intervention - 6 déc. 2013 à 12:34
0
Utile
Merci à ucfoutu pour la méthode Color.ToArgb.
L'exemple donné dans MSDN ne concerne que le mode graphique, je souhaite une réponse plus générale commençant au pointeur de la souris pour se terminer par les trois valeurs de la couleur du pixel.
Merci à tous.
Commenter la réponse de Cluny265
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 6 déc. 2013 à 13:14
0
Utile
1) Prends s'il te plait l'habitude de répondre en réponse et non en commentaires (on ne s'y retrouve plus)
2) et alors ? Ta question serait-elle finalement comment relever la couleur aux coordonnées du curseur ? (car pour le reste - dès lors qu'est relevée une couleur - tu as déjà eu ta réponse !)
Commenter la réponse de ucfoutu
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 6 déc. 2013 à 13:36
Commenter la réponse de cs_Le Pivert
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 6 déc. 2013 à 14:15
0
Utile
Bonjour

il n'y a pas de formule magique
il faut créer un bitmap
copie de l'écran dans le bitmap
utiliser la méthode getpixel
http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.getpixel(v=vs.110).aspx

ex savoir le ARGB du pixel à l'évenement mouseup d'un panel

Private Sub Panel1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseUp
Dim gr As System.Drawing.Graphics
Dim mycolor As System.Drawing.Color
gr = DirectCast(sender, Panel).CreateGraphics
Dim mybitmap As New Bitmap(DirectCast(sender, Panel).Width, DirectCast(sender, Panel).Height, gr)
gr = Graphics.FromImage(mybitmap)
gr.CopyFromScreen(DirectCast(sender, Panel).Location, Point.Empty, New Size(mybitmap.Width, mybitmap.Height), CopyPixelOperation.SourceCopy)
mycolor = mybitmap.GetPixel(e.X, e.Y)
End Sub
Commenter la réponse de cs_ShayW
Cluny265 7 Messages postés samedi 14 avril 2012Date d'inscription 12 décembre 2013 Dernière intervention - 6 déc. 2013 à 18:36
0
Utile
Merci à tous les trois.
- uc foutu. Tu as la bonne question : "Comment relever la couleur aux coordonnées du curseur ? ". On m'a dit autrefois que quand la question est bien posée le pb est à moitié résolu. J'espère l'autre moitié . . .
- cs_ShayW. Et comment je copie une portion ou la toatalité de l'écran dans ce BitMat ?
cs _ Le Pivert. Je n'ai fait que jeter un couip d'oeil à ce programme. Une réponse pertinente (ou non . . .) demande étude.
Commenter la réponse de Cluny265
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 6/12/2013 à 19:00
0
Utile
Comme je te l'ai dit, je développe sous VB6 (pire, même, puisque le fais carrément en VB5) et non sous VB.Net
Pour faire ce que tu veux et plus encore (y compris l'identification des fenêtres et contrôles "balayés"), j'utilise personnellement sous VB6 les fonctions suivantes de l'API de Windows :
GetPixel Lib de la librairie gdi32
et GetCursorPos, GetWindowDC, FindWindow, WindowFromPoint, GetWindowRect et GetWindowText de la librairie user32
Je ne crée aucun bitmap et je travaille avec un timer

Observation : ne pas, comme je le fais, créer un bitmap de la totalité de l'écran permet de travailler comme on l'entend et où on l'entend (clin d'oeil si j'ai bien compris/deviné ce que tu cherches à faire...)

Je ne sais pas quel est l'équivalent éventuel sous VB.Net.
Voilà donc où s'arrête ma participation à cette discussion.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Commenter la réponse de ucfoutu
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 6 déc. 2013 à 19:00
0
Utile
1
Je t'ai fait cela qui est valable sur une PictureBox avec une image:

Public Class Form1
Private Sub PictureBox1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
Dim colorval As Long
Dim map1 As New Bitmap("C:\chemin fichier image.jpg")
colorval = map1.GetPixel(e.X, e.Y).ToArgb 'code long
' Conversion code long en RGB
Dim g As Byte = CByte(Int((colorval And &HFF00) / &H100))
Dim b As Byte = CByte((Int((colorval And &HFF0000) / &H10000)))
Dim r As Byte = CByte((Int(colorval And &HFF)))
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 Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
PictureBox1.Image = Image.FromFile("C:\chemin fichier image.jpg")
End Sub
End Class


Vois si cela te convient
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 6 déc. 2013 à 19:03
Bonjour, cs_Le Pivert,
Ton code devrait parfaitement fonctionner.
Il ne sera toutefois utile à Cluny265 que s'il se limite à un seul bitmap et ne cherche pas (comme je crois le deviner) à "balayer" ailleurs.
Commenter la réponse de cs_Le Pivert
Cluny265 7 Messages postés samedi 14 avril 2012Date d'inscription 12 décembre 2013 Dernière intervention - 6 déc. 2013 à 23:34
0
Utile
Merci encore à ucfoutu et Cs_Le Pivert, vous êtes super sympas.
Je vais me coller à ces essais.
Commenter la réponse de Cluny265
ehjoe 728 Messages postés samedi 4 avril 2009Date d'inscription 30 mars 2014 Dernière intervention - 7 déc. 2013 à 13:21
0
Utile
Bonjour,


Private Declare Function GetPixel Lib "gdi32" Alias "GetPixel" _
(ByVal hdc As Int32, ByVal x As Int32, ByVal y As Int32) As Int32
Dim xx, yy As Long
Sub Form2_MouseClick...
If e.Button <> Windows.Forms.MouseButtons.Left Then Exit Sub
Dim pixelColor As Color
Using g As Graphics = Graphics.FromHwnd(Me.Handle)
pixelColor = ColorTranslator.FromWin32(GetPixel(g.GetHdc(), xx, yy))
End Using
HScrollBar1.Value = pixelColor.R
HScrollBar2.Value = pixelColor.G
HScrollBar3.Value = pixelColor.B
End Sub

Cordialement, Joe.
Commenter la réponse de ehjoe
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 7 déc. 2013 à 15:06
0
Utile
Bonjour ehJoe ,

Très bien ce code, j'ai juste fait une petite rectif. Je l'ai mis dans l'évenement MouseDown du Form

    Private Declare Function GetPixel Lib "gdi32" Alias "GetPixel" _
(ByVal hdc As Int32, ByVal x As Int32, ByVal y As Int32) As Int32
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

J'ai testé les valeurs sur un échantillonneur, c'est parfait

Bon WE à tous
Commenter la réponse de cs_Le Pivert
Cluny265 7 Messages postés samedi 14 avril 2012Date d'inscription 12 décembre 2013 Dernière intervention - 8 déc. 2013 à 11:54
0
Utile
A l'attention de cs_Le Pivert
Bonjour
-ton petit programme me convient parfaitement et répond à la question. Merci
- J'ai essayé de travailler la référence
http://codes-sources.commentcamarche.net/source/48207-controles-color-picker-wheel-color-picker-screen-color-picker
J'ai beaucoup pataugé sans résultat. Dommage mais ce travail ne correspondait qu'à une curiosité tutorielle.
Une remarque, la référence citée par Willi
(http://msdn.microsoft.com/en-us/magazine/cc164113.aspx)
n'est plus accessible.

A +
Commenter la réponse de Cluny265

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.