![]() |
TImage bearbeiten: Speicher reicht angeblich nicht aus
Hallo.
Ich hab mal wieder ein ganz komisches Speicherproblem. Ich möchte ein JPEG bearbeiten. Da dies aber nicht möglich ist, arbeite ich mit TImage und Canvas und anschließend wandle ich in JPEG um:
Delphi-Quellcode:
Der Code hat aber tatsächlich mal funktioniert (und das auf einem PC mit halb so viel Speicher).
// JPEG "ADest" wird erstellt. Ist genau so groß wie "ASource". Anschließend werden 2 PNGs auf das leere Ziel-JPEG gelegt.
procedure TMainForm.body_spec(ASource, ADest: string); var img: TImage; img2: TPNGObject; tempjpeg: TJPEGImage; nw, nh: integer; begin tempjpeg := TJPEGImage.Create; try tempjpeg.LoadFromFile(ASource); nw := tempjpeg.Width; nh := tempjpeg.Height; finally tempjpeg.Free; end; up; img := TImage.Create(self); try img.Width := nw; // Umweg über nw und nh um Speicher nicht zu sehr durch gleichzeitiges Öffnen von "tempjpeg" und "img" zu belasten img.Height := nh; img2 := TPNGObject.Create(); try img2.LoadFromFile(GetTempDir+'files\body_spec.png'); img.Canvas.Draw(1405, 314, img2); // <-- Es sei nicht genügend Speicher vorhanden (blödsinn!) img.Canvas.Draw(2136, 314, img2); finally img2.Free; end; img.Picture.SaveToFile(GetTempDir+ctmpname); finally img.free; end; BmpToJpg(GetTempDir+ctmpname, ADest); DeleteFile(GetTempDir+ctmpname); end; Meldung ist: "Für diesen Befehl ist nicht genügend Speicher verfügbar" Ich habe hier aber 256 MB ph. RAM von 1 GB frei, also sehe ich kein Problem. Habe auch schon den FastMM Speichermanager am Laufen. Die Ziel-JPEG ist 4090x2678 groß. Was kann ich hier machen? PhotoShop kann doch mit so Dimensionen auch umgehen :? Gruß blackdrake |
Re: TImage bearbeiten: Speicher reicht angeblich nicht aus
Hallo.
Heute geht das Programm wieder. Scheinbar hat ein Neustart die Ressourcen etwas regeneriert. Das Problem sehe ich aber trotzdem noch (vor allem, weil mein Programm bei möglichst allen Endnutzern laufen soll): Wieso nutzt mein Programm/Delphi nicht die Möglichkeit der Auslagerungsdatei? Ich habe im Task-Manager gesehen, dass mein Programm eine Speicherauslastung von 85 MB hat, wenn es mit den großen Bitmaps arbeitet. Eigentlich war gestern soviel Speicher auf jeden Fall noch frei. Aber selbst wenn kein Speicher zur Verfügung stehen würde, wieso wird die Auslagerungsdatei nicht beansprucht? Gruß blackdrake // Edit: Der Fehler kommt schon wieder, obwohl kaum Programme laufen und ich viel Speicher übrig habe. Ich habe gemerkt, dass kurz vor der Exception die Auslagerungsdatei von 774 MB auf 860 MB hoch geht... Trotzdem könnte die Auslagerungsdatei noch sehr viel aushalten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz