Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi aus 2 bildern eins machen (https://www.delphipraxis.net/143716-aus-2-bildern-eins-machen.html)

gangs-taas 21. Nov 2009 22:30


aus 2 bildern eins machen
 
hey,
ich wollte aus 2 Bildern 1 machen. Hierbei gibt es aber nen kleinen Überschnitt...

so theoretisch funktioniert meine schleife auch ABer wenn ich sie länger laufen lasse fliege ich mit der meldung 'für diese berechung ist zu wenig speicher vorhanden' raus ... das kann eigl. nicht sein ich hab 3 Gb Ram ...

könntet ihr euch mein code mal angucken und sagen wo das Speicherleck ist ? :)
danke schonmal :

Delphi-Quellcode:
procedure TForm1.Zusammsetzen(Start: Integer);
var
  Bild: TBitmap ;
  ZBild1, ZBild2 : TBitmap ;
  Name_B1, Name_B2 : String ;

  procedure Schneiden(Name: string);
  var
    Bild : TBitmap;
  begin
    Bild := TBitmap.Create;
    try
      Bild.LoadFromFile(Name+'.Bmp');
      Bild.Canvas.CopyRect(Rect(0, 0, 914, 687), Bild.Canvas, Rect(153, 4, 1067, 690));
      Bild.Width := 914;
      Bild.Height := 687;
      Image1.Picture.Assign(Bild);
      Bild.SaveToFile(Name+'.bmp');
    finally
      Bild.Free;
    end;
  end;

  procedure Schneiden2(Name: string);
  var
    Bild : TBitmap;
  begin
    Bild := TBitmap.Create;
    try
      Bild.LoadFromFile(Name+'.Bmp');
      Bild.Canvas.CopyRect(Rect(0, 0, 914, 687), Bild.Canvas, Rect(153, 4, 1067, 687));
      Bild.Width := 914;
      Bild.Height := 687;
      Image2.Picture.Assign(Bild);
      Bild.SaveToFile(Name+'.bmp');
    finally
      Bild.Free;
    end;
  end;


begin
  Schneiden(IntToStr(Start));
  Schneiden2(IntToStr(Start +1));
  Bild := TBitmap.Create;
  ZBild2 := TBitmap.Create;
  ZBild1 := TBitmap.Create;
  Bild.Width := 914;
  Bild.Height := 1369 ;
  Name_B1 := IntToStr(Start);
  Name_B2 := IntToSTr(Start +1 );
  ZBild1.LoadFromFile(name_B1 + '.bmp');
  ZBild2.LoadFromFile(name_B2 + '.bmp');
  DeleteFile(Name_B1 + '.bmp');
  DeleteFile(Name_B2 + '.bmp');
  Bild.Canvas.CopyRect(Rect(0, 0, 914, 687), ZBild1.Canvas, Rect(0, 0, ZBild1.Width, ZBild1.Height));
  Bild.Height := 614;
  Bild.Height := 1369;
  Bild.Canvas.CopyRect(Rect(0, 625, 914, 1369), ZBild2.Canvas, Rect(0, 0, ZBild2.Width, ZBild2.Height));
  Image3.Picture.Assign(Bild);
  Image3.Picture.SaveToFile(name_B1 + '.bmp');
end;
könnt ihr mir sagen wo der fehler ist ?

Matze 21. Nov 2009 22:38

Re: aus 2 bildern eins machen
 
Hallo

Zitat:

Zitat von gangs-taas
so theoretisch funktioniert meine schleife [...]

Welche Schleife?

Wenn ich es richtig sehe, gibst du "Bild", "ZBild1" und "ZBild2" nicht wieder frei.
Vielleicht tummeln die sich bei mehrmaligem Aufruf alle noch im Speicher.

Grüße, Mazte

himitsu 21. Nov 2009 22:39

Re: aus 2 bildern eins machen
 
Delphi-Quellcode:
Bild := TBitmap.Create;
ZBild2 := TBitmap.Create;
ZBild1 := TBitmap.Create;
Wann/wo gibst du diese frei?

32-Bit-Anwendung = maximal 2 GB (abzüglich Speicherfragmentierung und Anderem)

gangs-taas 21. Nov 2009 22:58

Re: aus 2 bildern eins machen
 
oh ich hatte gedacht delphi wäre so schlau und würde das für mich machen ...

danke

Corpsman 22. Nov 2009 09:09

Re: aus 2 bildern eins machen
 
Nein, Delphi hat keine Garbage Kollektion, wenn du so was haben willst, musst du Java nehmen.

SirThornberry 22. Nov 2009 09:40

Re: aus 2 bildern eins machen
 
Oder Delphi .NET, C# etc.?!

himitsu 22. Nov 2009 10:29

Re: aus 2 bildern eins machen
 
oder Interfaces

DeddyH 22. Nov 2009 11:58

Re: aus 2 bildern eins machen
 
Oder einfach sauberer programmieren :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz