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;

  • 相关阅读:
    杯具,丢失了一部分邮件
    Android Building System 总结
    build/envsetup.sh
    PhoneApp是什么时候被创建的
    测试电信的WAP PUSH的方法
    修改Activity响应音量控制键修改的音频流
    ril崩溃时的出错地址定位
    java interface 强制类型转换小记
    android 修改系统程序图标大小
    git 合并patch的方法
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/3106286.html
Copyright © 2011-2022 走看看