Einzelnen Beitrag anzeigen

meisteralex

Registriert seit: 22. Nov 2005
173 Beiträge
 
#1

Bitmap als Zeiger - Ich versteh es nicht !

  Alt 20. Dez 2005, 18:36
Delphi-Quellcode:
function bitblt_encode(bild1, bild2:tbitmap):tbitmap;
var
tempbild1,tempbild2:tbitmap;
begin
  tempbild1 := tbitmap.create;
  tempbild2 := tbitmap.Create;
  tempbild1.Assign(bild1);
  tempbild2.Assign(bild2);
                  //hier wird image 1 geändern wenn ide orginalrefferenze übergeben wird !!!
  bitblt(result.Canvas.Handle ,0,0,tempbild1.Width,tempbild1.Height,tempbild1.Canvas.Handle,0,0,srccopy);
  bitblt(result.Canvas.Handle ,0,0,tempbild2.Width,tempbild2.Height,tempbild2.Canvas.Handle,0,0,srcinvert);

  tempbild1.free;
  tempbild2.Free;

end;
habe die oben stehende funktion geschreiben und wende sie wie folgt an:

Delphi-Quellcode:
  bit1 := tbitmap.Create;
  bit2:= tbitmap.Create ;
  bit1.LoadFromFile('C:\bild1.bmp');
  bit2.LoadFromFile('c:\bild2.bmp');
  diffimage := tbitmap.Create;
  diffimage2 := tbitmap.Create;

  image1.Picture.Bitmap.Assign(bit1);
  image2.Picture.Bitmap.Assign(bit2);

  diffimage.Assign(bitblt_encode(bit1,bit2));

  image1.Picture.Bitmap.Assign(bit1);
  image2.Picture.Bitmap.Assign(bit2);
mein problem ist, dass die funktion bit2 ändert .
Ok, das mit den Zeiger versteh ich ja, dass ich der Funktion einen Zeiger auf das BitmapObjekt übergeben, deshalb weiße ich in der Funktion ja dem tempbild2 mit tempbild2.assign(bit2) den inhalt zu und arbeite damit weiter. warum ändert sich also trotzdem bit2 nach dem durchlauf der funktion ???
kann mir jemand erklären wie ich die funkton schreiben müsste, damit sie in keinster weise die ihr übergebenen objekte verändert ???
  Mit Zitat antworten Zitat