Delphi实现控件简单的图片识别修改版
昨天在整理电脑桌面时发现的一个网友发来的小程序,今天重新修改了分享给大家。因此小程序利用控件来找图的,所以在线程处理方面没写完整的代码,只是利用时间控件来找图片的,给大家学习学习……演示代码如下:
procedure FindImgPicxs ;stdcall ;
var
huaban:TCanvas;
hhwnd:HWND;
x,y,m,n,l:integer;
cao,yang: TColor;
t1,t2:Cardinal;
label z,s;
begin
l:=0;
Form1.Timer1.Enabled :=False ;
t2:= GetTickCount;
z:
n:=0;
m:=0;
huaban:=TCanvas.Create;
hhwnd:=FindWindow(nil,'星座.gif - Windows 图片和传真查看器');
huaban.Handle :=GetDC(hhwnd);
//找图开始
t1:= GetTickCount;
Form1.Image1.Canvas.Lock;
Form1.Image1.Canvas.CopyRect(rect(0,0,105,105),huaban,Rect(100,50,205,155));
Form1.Image1.Refresh;
Form1.Image1.Canvas.Unlock ;
for x:=0 to 105 do
begin
for y:=0 to 105do
begin
cao:=Form1.Image1.Canvas.Pixels;
yang:=Form1.Image2.Canvas.Pixels;
if cao=yang then
begin
//像素相同的点个数
n:=n+1;
Form1.Edit1.Text := IntToStr(n);
Form1.Edit1.Refresh;
end else
if cao<>yang then
begin
//像素不相同的点个数
m:=m+1;
Form1.Edit2.Text := IntToStr(m);
Form1.Edit2.Refresh;
//这里如果判断到一个点的像素不一样就重新找图判断
goto z;
end;
end ;
end;
Form1.Edit4.Text := IntToStr(m+n);
Form1.Edit4.Refresh;
//if (n/105*105=1) then //11236像素相同的百分比1,实际上百比分一直没到100%
if m=0 then
begin
t1:= GetTickCount-t1;
l:=l+1;
form1.Edit3.Text := IntToStr(l);
Form1.Edit3.Refresh;
Form1.Memo2.Lines.Add(Format('Img控件找到第 %d 张图',));
Form1.Memo2.Lines.Add(Format('Img控件找单图耗时 %d 毫秒',));
ReleaseDC(hhwnd,huaban.Handle);
if l>= StrToInt(Form1.Edit5.Text) then
begin
t2:= GetTickCount-t2;
Form1.Memo2.Lines.Add(Format('Img控件找图总耗时 %d 毫秒',));
Form1.Button2.Caption :='开始找图';
goto s;
end
else
begin
ReleaseDC(hhwnd,huaban.Handle);
//新一轮找图开始
goto z;
end;
end;
s:
ReleaseDC(hhwnd,huaban.Handle);
end;
源码下载:
第一个赶来支持老大!
页:
[1]