2017-02-13 51 views
1

Это для Delphi (7).Как вернуть цвет на основе координат X, Y с экрана?

Я пытался найти искатель пикселей для экрана, но без особой помощи. В лучшем случае я нашел что-то, что займет целый скриншот и сохранит его на холсте, но я не уверен, действительно ли это необходимо, поскольку единственная цель - проверить данную координацию.

я в основном просто нужно что-то, что бы сделать это работает:

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

ответ

4

Попробуйте с этим кодом:

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

Пример программы, чтобы показать шестнадцатеричный цвет:

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; 

Если вам нужен пиксель определенного окна, вам нужно изменить вызов GetDC с помощью дескриптора окна.

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: В примере, вы можете извлечь компоненты RGB с помощью функции (единицы Windows) GetRValue, GetGValue, GetBValue, вместо битовых операций. Например:

R:= GetRValue(Color); 
+1

Вам не нужно делать бит, чтобы скрестить себя - в блоке Windows есть GetRValue/GetGValue/GetBValue. –

+0

Фантастический! Огромное спасибо. –