Einzelnen Beitrag anzeigen

Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#3

Re: jpeg in FileStream speichern

  Alt 8. Apr 2009, 20:34
Hallo,
erstens würde ich hier auch fmCreate nehmen, weil die Datei allerwahrscheinlichkeit nach nicht existiert.

Ich würde auch zweitens folgenden Code empfehlen:
Delphi-Quellcode:
var
  Datei : TFileStream;
  jpeg : TJpegImage;
  Bild: TPicture;
begin
  Datei := TFileStream.Create(Savedialog1.FileName,fmCreate);
  // JPEG erzeugen
  jpeg := TJpegImage.Create;
  jpeg.CompressionQuality := 90;

  Bild := TPicture.Create;
  Bild.LoadFromFile(mmFiles.Lines[i]);
  jpeg.Assign(Bild.Graphic);
  jpeg.Compress;
  Bild.Free;

  // in Stream schreiben
  jpeg.SaveToStream(datei);
  jpeg.Free;
  datei.free;
Der Vorteil bei dieser geänderten Version liegt darin, dass TPicture alle verfügbaren Dateiformate lesen kann (auch JPEG, etc.), sobald die Unit für den Graphic-Typ in die Uses-Liste eingetragen wird. (Es geht z.B. auch PNG).
Des weiteren hast du für ein Speicherleck gearbeitet, da du deinen File-Stream nie aus dem Speicher gekehrt hast. Heißt auch, dass die Datei noch offen war.
Falls dich noch ein wenig die Dateisicherheit interessiert, guck doch mal nach folgendem:
Code:
fmShareExclusive   Kein Lese- und Schreibzugriff.
fmShareDenyWrite   Kein Schreibzugriff.
fmShareDenyRead   Kein Lesezugriff. Verwenden Sie diesen Modus nicht in plattformübergreifenden Anwendungen.
fmShareDenyNone   Andere haben uneingeschränkten Zugriff.
Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat