潇潇 发表于 2013-6-4 19:47:27

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;



源码下载:




花心胡萝卜 发表于 2013-6-4 20:03:32

第一个赶来支持老大!
页: [1]
查看完整版本: Delphi实现控件简单的图片识别修改版