Einzelnen Beitrag anzeigen

night

Registriert seit: 23. Jun 2006
22 Beiträge
 
Turbo Delphi für Win32
 
#1

TJpegImage saveToStream und saveTo File funktioniert nicht

  Alt 29. Aug 2009, 19:36
Hallo,

ich habe ein Programm, dass ein JPG öffnent. Dann möchte ich dazu ein Text schreiben. Der Text, das Bild und das Datum sollen in eine neue Datei geschrieben werden. Wenn ich nur den Text und das Datum abspeichere, dann funktioniert das ohne Probleme. Sobald ich aber das Bild mit abspeichern möchte, kommt kein Fehler, aber es wird auch keine Datei erzeugt.
Ich habe dann versucht, dass Bild direkt wieder mit SaveToFile in eine Datei zu schreiben, aber dabei wird auch keine Datei erstellt.
Mein Code zum Laden des Bildes:

Delphi-Quellcode:
  if form1.OpenPictureDialog1.execute then begin
    Data := self.data(form1.MCalendar.Date);
    Data.FPicture.Free;
    Data.FPicture := TJpegImage.Create;
    Data.FPicture.CompressionQuality := 20;
    Data.FPicture.LoadFromFile(form1.OpenPictureDialog1.FileName);
    form1.IPicture.Picture.Bitmap.Assign(Data.FPicture);
  end;
Das Bild wird auf dem Image (IPicture) angezeigt.

So nun die Methode zum Speichern des Textes:

Delphi-Quellcode:
procedure TAdmin.save;
var stream:TFileStream;
    i,n:Integer;
begin
  n :=-1;
  n := high(FData);
  if n >= 0 then begin

    stream := TFileStream.Create(InitialFile, fmCreate);
    try
      try
       stream.Write(n, sizeOf(n));
       for I := 0 to n do
         FData[i].save(stream);
      except
        on e: exception do showmessage(e.Message);
      end;
    finally
      FreeAndNil(stream);
    end;
  end;
end;

   Data := self.data(form1.MCalendar.Date);
   Data.FText := form1.MMessageInput.Text;
   if Data.FPicture <> nil then
     Data.FPicture.SaveToFile('test.jpg'); // Einfach nur zum Testen
Data.FPicture ist nicht NIL und es kommt auch kein Fehler beim Ausführen von SaveToFile, aber die Datei wird nicht erzeugt.

So und nun mein Code zum Speichern
Delphi-Quellcode:
procedure TAdmin.save;
var stream:TFileStream;
    i,n:Integer;
begin
  n :=-1;
  n := high(FData);
  if n >= 0 then begin

    stream := TFileStream.Create(InitialFile, fmCreate);
    try
      try
       stream.Write(n, sizeOf(n));
       for I := 0 to n do
         FData[i].save(stream);
      except
        on e: exception do showmessage(e.Message);
      end;
    finally
      FreeAndNil(stream);
    end;
  end;
end;
und die Methode TData.save(s:Stream)
Delphi-Quellcode:
procedure TData.save(stream: TFileStream);
var ms: TMemoryStream;
    len: Int64;
    strlen: Integer;
begin
  if stream <> nil then begin
    stream.Write(FDate, sizeOf(FDate));
    strlen := length(FText);
    stream.Write(strlen, sizeof(strlen));
    stream.Write(FText[1], strlen);

    ms := TMemoryStream.Create;
    try
      try
        FPicture.SaveToStream(ms);
        len := ms.Size;
        stream.Write(len, sizeOf(len));
        ms.SaveToStream(stream);
      except
        on e: exception do showmessage(e.Message);
      end;
   finally
      FreeAndNil(ms);
    end;
  end;
end;
Das Abspeichern des Bildes habe ich von http://www.delphipraxis.net/internal....php?p=1030334.

Vielen Dank und Viele Grüße
Stefan
  Mit Zitat antworten Zitat