Napisao sam ovako nesto:
Code:
TImageCompareInfo = record
Found : Boolean;
Left, Top, Width, Height : Integer;
end;
function CompareImage(ABigImage, ASmallImage : TBitmap; var imagecomp : TImageCompareInfo) : Boolean;
var
C1, C2, C3, C4 : Integer;
different : Boolean;
begin
result := FALSE;
ABigImage.PixelFormat := pf24bit;
For C1 := 0 to ABigImage.Height - ASmallImage.Height - 1 Do
Begin
For C2 := 0 to ABigImage.Width - ASmallImage.Width - 1 Do
If ABigImage.Canvas.Pixels[C2, C1] = ASmallImage.Canvas.Pixels[0, 0] Then
Begin
different := FALSE;
For C3 := C2 + 1 to C2 + ASmallImage.Width - 1 Do
Begin
For C4 := C1 + 1 to C1 + ASmallImage.Height - 1 Do
Begin
If ABigImage.Canvas.Pixels[C3, C4] - ASmallImage.Canvas.Pixels[C3 - C2, C4 - C1] > $01 Then
Begin
different := TRUE;
Break;
End;
End;
If different Then
Break;
End;
If not different Then
Begin
imagecomp.Found := TRUE;
imagecomp.Left := C2;
imagecomp.Top := C1;
imagecomp.Width := ASmallImage.Width;
imagecomp.Height := ASmallImage.Height;
result := TRUE;
Exit;
End;
End;
End;
end;
TImageCompareInfo = record
Found : Boolean;
Left, Top, Width, Height : Integer;
end;
function CompareImage(ABigImage, ASmallImage : TBitmap; var imagecomp : TImageCompareInfo) : Boolean;
var
C1, C2, C3, C4 : Integer;
different : Boolean;
begin
result := FALSE;
ABigImage.PixelFormat := pf24bit;
For C1 := 0 to ABigImage.Height - ASmallImage.Height - 1 Do
Begin
For C2 := 0 to ABigImage.Width - ASmallImage.Width - 1 Do
If ABigImage.Canvas.Pixels[C2, C1] = ASmallImage.Canvas.Pixels[0, 0] Then
Begin
different := FALSE;
For C3 := C2 + 1 to C2 + ASmallImage.Width - 1 Do
Begin
For C4 := C1 + 1 to C1 + ASmallImage.Height - 1 Do
Begin
If ABigImage.Canvas.Pixels[C3, C4] - ASmallImage.Canvas.Pixels[C3 - C2, C4 - C1] > $01 Then
Begin
different := TRUE;
Break;
End;
End;
If different Then
Break;
End;
If not different Then
Begin
imagecomp.Found := TRUE;
imagecomp.Left := C2;
imagecomp.Top := C1;
imagecomp.Width := ASmallImage.Width;
imagecomp.Height := ASmallImage.Height;
result := TRUE;
Exit;
End;
End;
End;
end;
Medjutim, da li postoji neka optimizovanija funkcija koja radi ovo ? Jer ovoj mojoj treba otprilike 4-5 sekundi da procesuira sliku od 1440x900.
Hvala unapred.