Vous êtes sur la page 1sur 2

Comment retrouver la couleur d'un pixel à l'écran ?

Comment retrouver les composantes rouge, vert, bleu d'un code couleur de type Long ?

Comment retrouver la couleur d'un pixel à l'écran ?

Si vous cherchez simplement à connaître la couleur d'un point dans un PictureBox, utilisez sa méthode Point(). Sinon,
voici une méthode pour récupérer la couleur de n'importe quel pixel à l'écran.

Placez ce code dans un module standard :

 
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long

Public Type Couleur


red As Integer
green As Integer
blue As Integer
End Type

Public Function CouleurPixel (ByVal x As Long, ByVal y As Long) As Couleur

Dim pixel As Couleur, RGBPx As Long

RGBPx = GetPixel(GetDC(0&), x, y)
pixel.red = &HFF& And RGBPx
pixel.green = (&HFF00& And RGBPx) \ 256
pixel.blue = (&HFF0000 And RGBPx) \ 65536
CouleurPixel = pixel

End Function

La fonction CouleurPixel renvoie la couleur du pixel dont les coordonnées lui ont été passées en paramètres, dans
une structure Couleur. Si vous voulez connaître la position du pointeur de souris, ajoutez ces déclarations dans le
module standard :

 
Public Declare Function GetCursorPos Lib "user32" (lpPoint As PointAPI) As Long

Public Type PointAPI


X As Long
Y As Long
End Type

Voici maintenant un exemple où l'on utilise un Timer pour mettre dans un PictureBox la couleur du pixel survolé par
la souris :

 
Private Sub Timer1_Timer()

Dim pixel As Couleur, CursPos As PointAPI

GetCursorPos CursPos
pixel = CouleurPixel(CursPos.X, CursPos.Y)
Picture1.BackColor = RGB(pixel.red, pixel.green, pixel.blue)

End Sub
Comment retrouver les composantes rouge, vert, bleu d'un code couleur de type Long ?

Rappelons que le code d'une couleur se calcule par les composantes RGB à l'aide de la formule :
Red + Green * 256 + Blue * 256 * 256.
Il nous suffit donc d'écrire la fonction inverse.

 
Public Sub ComposantesRGB(ByVal Couleur As Long, Red As Long, Green As Long, Blue As Long)

Blue = Int(Couleur / 65536)


Green = Int((Couleur - (65536 * Blue)) / 256)
Red = Couleur - ((Blue * 65536) + (Green * 256))

End Sub

Private Sub Command1_Click()

Dim Rouge As Long, Vert As Long, Bleu As Long

ComposantesRGB 9550940, Rouge, Vert, Bleu


LblRed.Caption = "Red = " & Rouge
LblGreen.Caption = "Green = " & Vert
LblBlue.Caption = "Blue = " & Bleu

End Sub

VOIR http://access.developpez.com/faq/?page=IHM