Hi@all!
Also erstmal danke für die ganzen antworten!
@Jan: Ich verstehe nicht, warum deine Routine schneller gehen soll...du geht doch per pixels anweisung das ganzen Bild 2 mal durch, dadurch müsste es doch auch im endeffekt doppeltsolange dauern.
Ich benutzte nun die g32 lib. die funktion ist super, dauert inetwa noch so 3 sekunden, allerdings folgendes problem: Es wird nicht mehr der richtige bildausschnitt kopiert, weil aus einen mir unbekannten grund x_max und y_max nicht mehr korrekt erkannt werden (achtet auf meine kommentierung im Source Code!)
Delphi-Quellcode:
var
r,r2 : TRect;
Bild,Bild2,bild3 : TBitmap32;
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 := TBitmap32.Create;
Bild2 :=TBitmap32.Create;
Bild3:=TBitmap32.Create;
Bild.LoadFromFile('C:\windows\desktop\bild1.bmp');
Bild2.LoadFromFile('C:\windows\desktop\bild2.bmp');
for x:=0 to bild.width-1 do
for y:=0 to bild.height-1 do
begin
if bild[x,y] <> bild2[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;
showmessage(inttostr(x_min)+' '+inttostr(y_min)+' '+inttostr(x_max)+' '+inttostr(y_max));
r := Rect(0, 0, x_max, y_max);
r2:= rect(x_min,y_min,x_max-x_min,y_max-y_min);
bild3.Width:=x_max-x_min;
bild3.height:=y_max-y_min;
bild2.drawto(bild3,r2,r); //hier das verstehe ich gar nicht, denn:
//wenn ich r und r2 vertausche, werden x_max und y_max wieder richtig
//erkannt. kann mir das jemand erklären?!? Ist das n fehler in der g32
//lib?
bild3.SaveToFile('C:\windows\desktop\bild3.bmp');
showmessage('fertig');
end;
Ich will ja nicht nerven, aber kann mir da jemand helfen?