Hi @ All.
Ich habe einen Algorithmus welcher ca 230 Durchläufe pro Sekunde hat. Allerdings bleibt er so ungefähr bei 15000 Durchläufen mit einer Zugriffsverletzung hängen? Warum?
Delphi-Quellcode:
procedure CompareImages(Image1,Image2:TBitmap);
var P,P2 : PRGBTripleArray;
i : integer;
differents : integer;
size : integer;
color1,color2:TColor;
begin
differents := 0;
QueryPerformanceFrequency(freq);
QueryPerformanceCounter(zeit1);
P := Image1.ScanLine[Image1.Height-1];
P2 := Image2.ScanLine[Image2.Height-1];
size := Image1.Width*Image1.Height;
for i := 0
to size-1
do
begin
color1 := RGBToColor(
RGB(P[i].rgbtRed,P[i].rgbtGreen,P[i].rgbtBlue));
color2 := RGBToColor(
RGB(P2[i].rgbtRed,P2[i].rgbtGreen,P2[i].rgbtBlue));
if color1-color2 <> 0
then
inc(differents);
end;
QueryPerformanceCounter(zeit2);
Aufruf Erfolg über einmaliges Aufrufen der Procedure Compare
Delphi-Quellcode:
procedure Compare;
begin
if stopping then
Exit;
Image2.Picture.Bitmap.FreeImage;
Image2.Picture.Bitmap.LoadFromFile(Listbox1.Items[ListBox1.ItemIndex]);
inc(counter);
Form1.Caption := IntToStr(counter);
CompareImages(Image1.Picture.Bitmap,Image2.Picture.Bitmap);
if ListBox1.ItemIndex = ListBox1.Items.Count-1 then
ListBox1.ItemIndex := 0;
ListBox1.ItemIndex := ListBox1.ItemIndex +1;
Compare;
end;
Hoffe ihr könnt mir helfen den Fehler zu finden. Vermute das es etwas mit dem
Ram zutun hat. Gebe ich die Sachen vll nicht alle wieder frei?
Philipp F.