zoukankan      html  css  js  c++  java
  • delphi之精确找图

    以前一直以为找图比较难,后来看了AutoHotkey的源码,原来也就是笨方法。

    以下是精确的找图。因为已经很快,没再做优化处理。注意我这里去掉了透明处理,需要的自己加上吧。

    //精确判断,在大图里的(x,y)位置上是不是小图?

    function BmpCmp(bmpBig,bmp:TBitmap;x,y:integer):boolean;

    var

      i,j:integer;

      row1, row2:pRGBTripArray;

      p1,p2:TRGBTriple;

    begin

      result:=true;

      for j:=0 to bmp.Height-1 do

      begin

        row1:=bmpBig.ScanLine[y+j];

        row2:=bmp.ScanLine[j];

        for i:= 0 to bmp.Width-1 do

        begin

          p1:=row1[x+i];

          p2:=row2[i];

          if (p1.rgbtBlue<>p2.rgbtBlue) or (p1.rgbtGreen<>p2.rgbtGreen)

            or (p1.rgbtRed<>p2.rgbtRed) then

          begin

            result:=false;

            exit;

          end;

        end;

      end;

    end;

     

    以下是精确找图, 调用精确判断

    // 精确找图,在大图里的(x1,y1)和(x2,y2)中找出小图来?

    // 当返回true时,以下变量存放找到的位置

    //    bmpFindX:integer;

    //    bmpFindY:integer;

    function BmpFind(bmpBig,bmp:TBitmap;x1,y1,x2,y2:integer):Boolean;

    var

      i,j,x,y:integer;

      row, row1, row2:pRGBTripArray;

      p0,p,p1,p2:TRGBTriple;

    begin

      if x1+y1+x2+y2=0 then

      begin

        x1:=0;

        y1:=0;

        x2:=bmpBig.Width-1;

        y2:=bmpBig.Height-1;

      end;

      row:=bmp.ScanLine[0];

      p0:=row[0];

      for y:=y1 to y2-1 do

      begin

        row:=bmpBig.ScanLine[y];

        for x:=x1 to x2-1 do

        begin

          p:=row[x];

          if (bmp.Width<=x2-x) and (bmp.Height<=y2-y)

             and (p.rgbtBlue=p0.rgbtBlue) and (p.rgbtGreen=p0.rgbtGreen)

             and (p.rgbtRed=p0.rgbtRed) then

          begin

            if BmpCmp(bmpBig,bmp,x,y) then

            begin

              result:=true;

              bmpFindX:=x;

              bmpFindY:=y;

              exit;

            end;

          end; // end if

        end; // end for x

      end; // end for y

      result:=false;

    end;

  • 相关阅读:
    AspNetPage分页的RecordCount赋值问题
    bundle实现Activity之间的数据传递
    Windows Communication Foundation入门(Part Two) (转)
    数据库绑定TreeView,使用递归
    利用Repeater控件显示主-从关系数据表 (转)
    将TreeView中导出为XML数据
    JS调用WebService 无刷新获得在线消息
    table中取得各个单元格中的数据 parentElement children
    Oracle PL/SQL语言入门
    JavaScript直接导出Excel,Word
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/3106286.html
Copyright © 2011-2022 走看看