欢迎您注册加入!这里有您将更精采!
您需要 登录 才可以下载或查看,没有账号?注册
x
昨天在整理电脑桌面时发现的一个网友发来的小程序,今天重新修改了分享给大家。因此小程序利用控件来找图的,所以在线程处理方面没写完整的代码,只是利用时间控件来找图片的,给大家学习学习……
演示代码如下:
[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 105 do
begin
cao:=Form1.Image1.Canvas.Pixels[x,y];
yang:=Form1.Image2.Canvas.Pixels[x,y];
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 张图',[l]));
Form1.Memo2.Lines.Add(Format('Img控件找单图耗时 %d 毫秒',[t1]));
ReleaseDC(hhwnd,huaban.Handle);
if l>= StrToInt(Form1.Edit5.Text) then
begin
t2:= GetTickCount-t2;
Form1.Memo2.Lines.Add(Format('Img控件找图总耗时 %d 毫秒',[t2]));
Form1.Button2.Caption :='开始找图';
goto s;
end
else
begin
ReleaseDC(hhwnd,huaban.Handle);
//新一轮找图开始
goto z;
end;
end;
s:
ReleaseDC(hhwnd,huaban.Handle);
end;
Delphi 实现图片识别
源码下载:
Delphi实现控件简单的图片识别修改版.rar
(492.8 KB, 下载次数: 4)
|