怎么将2张图片做减法,找出不同的地方(100分+100RMB)

如何将2张图片做减法,找出不同的地方(100分+100RMB)
要求实现这样的功能:
按下按键后,连续在窗体上截屏2张图片(时间间隔为0.1秒),然后将这2张图片做减法计算,将会只剩下某一个点(或者一个圈),得出该点或者该圈的中心坐标。
100分不足以我的感谢,所以另用淘宝支付100RMB当作酬劳。
可以实现该功能者请直接加我扣扣:一零九九七三。谢谢

------解决方案--------------------
没事的,我也是借大家的需求"复习+学习"一下,代码发上来供你参考,QQ木有,不好意思。
Delphi(Pascal) code

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ActiveX, StdCtrls, ExtCtrls, OleCtrls, SHDocVw;

type
  TForm1 = class(TForm)
    wb1: TWebBrowser;
    Image1: TImage;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
        mView: IViewObject;  //uses ActiveX
        mRect: TRect;
        i,j: integer;
        mColor: integer;
begin
        if wb1.Document = nil then
                exit;
        if succeeded(wb1.Document.QueryInterface(IViewObject,mView)) then
        begin
                mRect := Rect(0,0,wb1.Width,wb1.Height);
                mView.Draw(DVASPECT_CONTENT,1,nil,nil,Handle,Image1.Canvas.Handle,@mRect,nil,nil,0);
                mView._Release;

                //从Image1里取颜色值
                mColor := Image1.Canvas.Pixels[50,50];
                //mColor := RGB(100,100,100);

                for i:=0 to Image1.Width-1 do
                        for j:=0 to Image1.Height-1 do
                        begin
                                if Image1.Canvas.Pixels[i,j]=mColor then
                                begin
                                        showmessage(IntToStr(i)+','+IntToStr(j));
                                end;
                        end;
        end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
        wb1.Navigate('http://localhost:12280/mtm/test.htm');
        Image1.Width := 100;
        Image1.Height := 100;
end;

end.

------解决方案--------------------
你这个其实只要将两次获取的图片进行异或就可以了。我用的三个bmp,第一个第二个用来存放第一次第二次截取的图片,第三个用来存放XOR的结果,最后把三个图片显示到窗体的三个Image控件上面,获取坐标只获取了第一个点,如果多个点要全部取出来再求中心点,如果取回(0,0)代表两次截取的图片是一致的,XOR的结果为像素全0的图片,一张黑色的图片。
Delphi(Pascal) code

procedure TfrmMain.btnXorClick(Sender: TObject);
var
  dc: HDC;
  bmp1,bmp2,bmp3: TBitmap;
  pt: TPoint;
const
  WW=220; //Width
  HH=160; //Height
  XX=0;   //X Coordinate
  YY=0;   //Y Coordinate
  _SLEEP = 100; //Sleep times
  procedure BitBltEx(aBMP: TBitmap; X, Y, PW, PH: integer);
  begin
    aBMP.PixelFormat := pf24bit;
    aBMP.Width := PW;
    aBMP.Height := PH;
    BitBlt(aBMP.Canvas.Handle, 0, 0, PW, PH, dc, X, Y, SRCCOPY);
  end;
  procedure BmpXor(aBMP1,aBMP2,aBMP3: TBitmap);
  var
    i,j: Integer;
    p1,p2,p3: pByteArray;
  begin
    for i := 0 to aBMP1.Height - 1 do
    begin
      p1 := aBMP1.ScanLine[i];
      p2 := aBMP2.ScanLine[i];
      p3 := aBMP3.ScanLine[i];
      for j := 0 to aBMP1.Width - 1 do
      begin
        p3[3 * j + 2] := p1[3 * j + 2] xor p2[3 * j + 2];
        p3[3 * j + 1] := p1[3 * j + 1] xor p2[3 * j + 1];
        p3[3 * j + 0] := p1[3 * j + 0] xor p2[3 * j + 0];
      end;
    end;
  end;
  function GetCoordinate(aBMP: TBitmap): TPoint;
  var
    i,j,found: Integer;
    p: pByteArray;
    arrTemp: array of Byte;
  begin
    Result := Point(0,0);
    found := 0;
    SetLength(arrTemp,aBMP.Width * 3);
    ZeroMemory(arrTemp,aBMP.Width * 3);
    for i := 0 to aBMP.Height - 1 do
    begin
      p := aBMP.ScanLine[i];
      if CompareMem(p,arrTemp,aBMP.Width * 3) then
        Continue
      else
        for j := 0 to aBMP.Width - 1 do
        begin
          if (p[3 * j + 2]>0) or (p[3 * j + 1]>0) or (p[3 * j + 0]>0) then
          begin
            found := 1;
            Result := Point(j,i);
            Break;
          end;  
        end;
      if found > 0 then Break;      
    end;
  end;
begin
  dc := CreateDC('DISPLAY', nil, nil, nil);
  bmp1 := TBitmap.Create;
  bmp2 := TBitmap.Create;
  bmp3 := TBitmap.Create;
  try
    BitBltEx(bmp1,XX,YY,WW,HH);
    Sleep(_SLEEP);
    BitBltEx(bmp2,XX,YY,WW,HH);
    BitBltEx(bmp3,XX,YY,WW,HH);
    BmpXor(bmp1,bmp2,bmp3);    
    Image1.Picture.Bitmap.Assign(bmp1);
    Image2.Picture.Bitmap.Assign(bmp2);
    Image3.Picture.Bitmap.Assign(bmp3);
    pt := GetCoordinate(bmp3);
    ShowMessageFmt('X:%d,Y:%d',[pt.X,pt.Y]);
  finally
    bmp1.Free;
    bmp2.Free;
    bmp3.Free;
    DeleteDC(dc);
  end;
end;