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:
// 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;
Der Code hat aber tatsächlich mal funktioniert (und das auf einem PC mit halb so viel Speicher).
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