2017-02-13 2 views
1

Ceci est pour Delphi (7).Comment renvoyer la couleur en fonction des coordonnées X, Y à partir de l'écran?

J'ai essayé de trouver un chercheur de pixels pour l'écran, mais sans beaucoup d'aide. Tout au plus j'ai trouvé quelque chose qui va prendre une capture d'écran entière et la stocker dans une toile, mais je ne suis pas sûr que ce soit vraiment nécessaire, car le seul but est de vérifier une coordination donnée.

je fondamentalement juste besoin de quelque chose qui rendrait cela fonctionne:

procedure TForm1.Button1Click(Sender: TObject); 
begin 
if(Checkcolor(1222,450) == 000000) then 
showmessage('Black color present at coordinates'); 
end; 

Répondre

4

Essayez avec ce code:

function ColorPixel(P: TPoint): TColor; 
var 
    DC: HDC; 
begin 
    DC:= GetDC(0); 
    Result:= GetPixel(DC,P.X,P.Y); 
    ReleaseDC(0,DC); 
end; 

Un exemple de programme pour montrer la couleur hexadécimal:

var 
    P: TPoint; 
    R,G,B: integer; 
begin 
    GetCursorPos(P); 
    Color:= ColorPixel(P); 
    R := Color and $ff; 
    G := (Color and $ff00) shr 8; 
    B := (Color and $ff0000) shr 16; 
    ShowMessage(format('(%d,%d,%d)',[R,G,B])); 
end; 

Si vous avez besoin du pixel d'une fenêtre spécifique, vous devez modifier l'appel GetDC en utilisant le handle de la fenêtre.

GetDC https://msdn.microsoft.com/en-us/library/windows/desktop/dd144871(v=vs.85).aspx GetPixel https://msdn.microsoft.com/en-us/library/windows/desktop/dd144909(v=vs.85).aspx

EDIT: Dans l'exemple, vous pouvez extraire les composants RVB à l'aide des fonctions (unité Windows) GetRValue, GetGValue, GetBValue, au lieu des opérations de bits. Par exemple:

R:= GetRValue(Color); 
+1

Vous n'avez pas besoin de faire le bit twiddling vous-même - il y a GetRValue/GetGValue/GetBValue dans l'unité Windows. –

+0

Fantastique! Merci beaucoup. –