Einzelnen Beitrag anzeigen

blackdrake

Registriert seit: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#1

TImage bearbeiten: Speicher reicht angeblich nicht aus

  Alt 10. Mai 2008, 19:29
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
Daniel Marschall
  Mit Zitat antworten Zitat