如何根据屏幕上的X,Y坐标返回颜色?
问题描述:
这是德尔福(7)。如何根据屏幕上的X,Y坐标返回颜色?
我一直在寻找屏幕的像素搜索器,但没有太多的帮助。最多的时候,我发现了一些需要完整截图并将其存储在画布中的内容,但我不确定是否真的有必要,因为唯一的目的是检查给定的协调。
我基本上只需要的东西,这将使这个工程:
procedure TForm1.Button1Click(Sender: TObject);
begin
if(Checkcolor(1222,450) == 000000) then
showmessage('Black color present at coordinates');
end;
答
尝试使用此代码:
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
编辑: 在这个例子中,可以提取使用函数(视窗单元)GetRValue
,GetGValue
,GetBValue
,代替位操作RGB分量。例如:
R:= GetRValue(Color);
您不需要自己动手一点 - 在单元Windows中有GetRValue/GetGValue/GetBValue。 –
太棒了!谢谢一堆。 –