Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
Delphi XE2 Professional
|
Bilder vergleichen -> optimiertes verfahren gesucht!
16. Jul 2005, 19:54
Hi, hab dieses Forum schon durchsucht, allerdings keinen wirklich passenden Thread gefunden. Einfaches Problem: Ich lade zwei gleich große bilder in eine canvas, und vergleiche Sie. Der unterschied (nur das Rechteck zwischen kleinsten unterschiedlichem Punkt und größtem unterschiedlichen punkt) wird in bild3 gespeichert. Allerdings braucht mein Rechner dafür ca. 10 sekunden, was mir zu lange ist. Gibts ne möglichkeit, diesenm Code zu optimieren?
Delphi-Quellcode:
var
c : TCanvas;
r,r2 : TRect;
Bild,Bild2,bild3 : TBitmap;
x,y,x_min,y_min,x_max,y_max:integer;
begin
x_min:=9999999;
y_min:=9999999;
x_max:=0;
y_max:=0;
Bild := TBitmap.Create;
Bild2 :=TBitmap.Create;
Bild.LoadFromFile('C:\windows\desktop\bild1.bmp');
Bild2.LoadFromFile('C:\windows\desktop\bild2.bmp');
for x:=1 to bild.width do
for y:=1 to bild.height do
begin
if bild.Canvas.pixels[x,y]<>bild2.Canvas.pixels[x,y] then
begin
if x_min>x then x_min:=x;
if x_max<x then x_max:=x;
if y_min>y then y_min:=y;
if y_max<y then y_max:=y;
end;
end;
r := Rect(0, 0, x_max-x_min, y_max-y_min);
r2:= rect(x_min,y_min,x_max,y_max);
Bild3:=TBitmap.Create;
bild3.Width:=x_max-x_min;
bild3.height:=y_max-y_min;
bild3.Canvas.CopyRect(r,bild2.canvas,r2);
bild3.SaveToFile('C:\windows\desktop\bild3.bmp');
showmessage('fertig');
end;
Mit freundlichen Grüßen,
Alleinherrscher
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)
Mein Netzwerktool: Lan.FS
|
|
Zitat
|