+ -
当前位置:首页 → 问答吧 → Delphi如何实现屏幕区域里找色?

Delphi如何实现屏幕区域里找色?

时间:2007-08-16

来源:互联网

已知颜色A,在屏幕指定区域查找和A相同的颜色,并返回该点坐标的X,Y值.就象按键精灵里的区域找色一样的功能.我是初学者,最好有例子给我看看.先谢谢了.
我的目的是:用查找颜色,在游戏里选择怪物.

作者: csppgame   发布时间: 2007-08-16

GetPixel()

作者: hsmserver   发布时间: 2007-08-16

有例子吗?
下面的我试了下.RGB全部是255
procedure TForm1.Button1Click(Sender: TObject);
var
  point:Tpoint;
  MyhDC : HDC;
  scrx1,scry1,temp,rr,gg,bb:Integer;
begin
  GetCursorPos(point);
  scrx1:=point.x;
  scry1:=point.y;
//获取到那个点的屏幕坐标,然后
  temp := GetPixel(MyhDC,scrx1, scry1);
  rr := GetRValue(temp);
  gg := GetGValue(temp);
  bb := GetBValue(temp);
  showmessage(inttostr(rr)+inttostr(gg)+inttostr(bb));
end;
end.

作者: csppgame   发布时间: 2007-08-16

var
pos: TPoint;
Handle: HWND;
ScreenDC: HDC;
Buf: array[0..1024] of Char;
ScreenColor: COLORREF;
begin
GetCursorPos(Pos); 
Handle := WindowFromPoint(Pos); 
edit1.Text := IntToStr(Handle);
GetClassName(Handle, Buf, 1024); 
edit2.Text := Buf;
SendMessage(Handle, WM_GETTEXT, 33, Integer(@Buf));
edit3.Text := Buf;

ScreenDC := GetDC(0);
ScreenColor := GetPixel(ScreenDC, Pos.X, Pos.Y);
//Shape.Brush.Color := TColor(ScreenColor);
edit1.Text := '红: ' + IntToStr(GetRValue(ScreenColor)) +
' 绿: ' + IntToStr(GetGValue(ScreenColor)) + ' 蓝: ' +
IntToStr(GetBValue(ScreenColor));
ReleaseDC(0, ScreenDC);
edit2.Text := Format('Delphi中颜色值:$00%2.2x%2.2x%2.2x', [GetBValue(ScreenColor),
GetGValue(ScreenColor), GetRValue(ScreenColor)]);

作者: brightyang   发布时间: 2007-08-16

记住给分

作者: brightyang   发布时间: 2007-08-16

你这个是取点的颜色啊.我象要的是范围找色,比如坐标(100,100)到(200,200)这个矩形里找颜色为红色的1个点.然后返回这个红色点的坐标值,在这个点上点下鼠标左键.

作者: csppgame   发布时间: 2007-08-16

晕。。
自已按着改不就行了》》》》

把一个范围看着是一个矩形,里面的点用循环取出颜色,然后把在这点模拟按键就行了啥

作者: brightyang   发布时间: 2007-08-17

GetPixel的效率有问题。

用scanline吧。

作者: kingnew   发布时间: 2007-08-28

用scanline加个循环比较就出来了。

还是选则连续的像素比较麻烦些

作者: leexuany   发布时间: 2007-08-28

lz要干嘛?

作者: meiZiNick   发布时间: 2008-05-01

我想楼主是搞外挂吧,我现在想搞个后台,不是针对Z轴的前后后台,而是指在屏幕指定区域外的后台,如从-1000,0到0,1024的范围内找图,不知哪位高人可以指点一二.
LZ我给你发个在当前屏幕指定区域查找图吧,不过这在屏幕外就不能用了,
1 VB里引用 那个QMDispatch.dll 
2 在系统中用regsvr32命令注册 DLL 
那个HELPER.DLL和WinIo.dll放在同一个地方,否则注册不了成功 
Private Declare Function FindPic Lib "QMDispatch" () As Long 
dim a as long 
Public QMDispatchObj As Object
在FORM中引用
Set QMDispatchObj = CreateObject("QMDispatch.QMFunction") 
pos=QMDispatchObj.FindPic (0, 0, 1280, 1024, "E:/工.bmp", 0.9 )
msgbox int(pos/8192)'X左边 
msgbox pos MOD 8192 'Y左边 

作者: abc40   发布时间: 2008-09-19

留个记号

作者: book_longker   发布时间: 2011-09-22