Gracias por tu colaboración duilioisola.
En realidad ya hago lo que tu dices, es decir si el primer pixel no coincide ya no sigo y cambio al siguiente punto de pantalla y también elimino la parte derecha e inferior donde no puede estar, pero todos los comentarios de mi primer escrito ya contaban con estas características en el código y tarda el miserere.
Tal como me sugieres adjunto el código:
Código Delphi
[-]
Function FindImage(AMonitor: Byte; B: TBitmap): Tpoint;
Var
BB: TgvBitMap;
BBB: TBitmap;
X, Y, XX, YY: Integer;
Font: TRect;
Ok: Boolean;
Begin
Result.X := -1;
Result.Y := -1;
BB := TgvBitMap.Create;
BB.Bitmap := TBitmap.Create;
BB.Bitmap.Canvas.Lock;
BB.Left := 0;
BB.Top := 0;
If (AMonitor = 1) And (Screen.MonitorCount > 0) Then
begin
BB.Bitmap.Width := Screen.Monitors[1].Width;
BB.Bitmap.Height := Screen.Monitors[1].Height;
end
else
begin
BB.Bitmap.Width := Screen.Width;
BB.Bitmap.Height := Screen.Height;
end;
GetDeskTop(AMonitor, BB);
For X := 0 To BB.Bitmap.Width - B.Width Do
Begin
For Y := 0 To BB.Bitmap.Height - B.Width Do
Begin
Ok := True;
For XX := 0 To B.Width - 1 Do
Begin
For YY := 0 To B.Height - 1 Do
Begin
If BB.Bitmap.Canvas.Pixels[X, Y] <> B.Canvas.Pixels[XX, YY] Then
begin
Ok := False;
Break;
end;
End;
If Not Ok Then
Break;
End;
If Ok Then
begin
Result.X:=X;
Result.Y:=Y;
Break;
end;
End;
If Ok Then
Break;
End;
If Assigned(BBB) Then
begin
BBB.Canvas.Unlock;
BBB.Free;
end;
If Assigned(BB) Then
begin
BB.Bitmap.Canvas.Unlock;
BB.Free;
end;
End;
Lo del monitor es porque trabajo con 2.
Saludos.