Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Speichern einer Serie von Dateien (https://www.delphipraxis.net/99901-speichern-einer-serie-von-dateien.html)

cltom 19. Sep 2007 11:34


Speichern einer Serie von Dateien
 
Hallo!

folgender Wunsch: es soll eine Serie von Bildern gespeichert werden nach dem Schema
Dateiname1.bmp
Dateiname2.bmp
Dateiname3.bmp

Der User soll via herkömmlichen TSaveDialog Ort und Name ein mal aussuchen, 1, 2, 3, ... wird automatisch ergänzt und eben nacheinander abgespeichert.

Nun habe ich mal folgendes probiert:

Delphi-Quellcode:
With SaveDialog1 do
  begin
    if execute then
      begin
        for i:=1 to 10 do
          begin
             //sinngemäß hier:
             saveimage(filename+inttostr(i));
          end;
      end;
  end;
das geht aber so einmal nicht, da nur die erste Datei abgespeichert wird.

Tipps und Rat? Danke!

cltom

s-off 19. Sep 2007 11:39

Re: Speichern einer Serie von Dateien
 
Hallo,

Zitat:

Zitat von cltom
das geht aber so einmal nicht, da nur die erste Datei abgespeichert wird.

Meinst Du 'Datei' oder 'Bild'? Das sind wei unterschiedliche Dinge :!:

Bild: Es wird nur das erste von zehn Bildern gespeichert, das aber 10x.
Datei: Das Bild wird nur in einer Datei abgespeichert, nicht wie gewünscht in 10.

Ich gehe aber mal davon aus, dass Du meinst, dass nur das erste Deiner 10 Bilder 10x gespeichert wird.

Ich kann aufgrund Deines Codes nur Vermutungen anstellen, da die Erläuterungen zu 'saveimage' fehlen.
Irgendwo musst Du natürlich das zu speichernde Bild auch wechseln. Entweder in Deiner SaveImage-Methode oder vorher, also in etwa so:

Delphi-Quellcode:
With SaveDialog1 do
  begin
    if execute then
      begin
        for i:=1 to 10 do
          begin
             //zuerst sinngemäss soetwas:
             wechsleimage;

             //sinngemäß hier:
             saveimage(filename+inttostr(i));
          end;
      end;
  end;

cltom 19. Sep 2007 11:45

Re: Speichern einer Serie von Dateien
 
hmm, ok. es geht um einzelne Bilder. Das saveimage ist eine Methode von TRChart, einer Chart-Komponente aus der SDL-Component Suite.

das saveimage sieht also in Wahrheit so aus:

Delphi-Quellcode:
RChart1.CopyToBMP(filename+inttostr(i),true)
Meine Vermutung war, dass der Ansatz mit dem TSaveDialog so nicht geht, darum habe ich die Details innendrin mal weggelassen.

cltom 19. Sep 2007 11:47

Re: Speichern einer Serie von Dateien
 
ps. es wird übrigens nur das erste Bild abgespeichert.

Um das ganze noch zu erklären, ich erzeuge der Reihe nach Diagramme im RChart und will die dann der Reihe nach abspeichern. Das Erzeugen klappt, sie werden der reihe nach angezeigt, doch abgespeichert wird nur das erste unter dem namen 'dateiname1.bmp'.

semike 19. Sep 2007 11:52

Re: Speichern einer Serie von Dateien
 
Ich vermute, dass es mit dem Dateinamen Probleme gibt. Es wird der Index i am Ende angehängt. Damit lautet der Dateiname dateiname.bmp1 .. dateiname.bmp10

Hier ein Codeschnipsel (nicht getestet) der das regeln sollte:

Delphi-Quellcode:
procedure Speichern;
var
  strFileName: String;
  i: Integer;
begin
  if SaveDialog1.Execute then
  begin
    strFileName := SaveDialog1.FileName;
    Insert('%d', strFileName, LastDelimiter('.', strFileName)-1);
    for i := 1 to 10 do
    begin
      WechsleImage(i);
      SaveImage(Format(strFileName, [i]);
    end;
  end;
end;
Die Idee ist es, den Dateinamen vorher mit einem Platzhalter für den Index auszustatten.

Hoffe das hilft Dir weiter.

Grüße
Michael

s-off 19. Sep 2007 11:57

Re: Speichern einer Serie von Dateien
 
Zitat:

Zitat von semike
Ich vermute, dass es mit dem Dateinamen Probleme gibt. Es wird der Index i am Ende angehängt. Damit lautet der Dateiname dateiname.bmp1 .. dateiname.bmp10

Auch wenn Du damit recht hast, ist das nicht die Ursache des Problems. Er hat ja 10 Dateien - nur in allen ist das gleiche Bild enthalten.

Edit:
Wenn Du das so machst,
Delphi-Quellcode:
RChart1.CopyToBMP(filename+inttostr(i),true)
dann musst Du natürlich vor dem Aufruf von CopyToBMP auch das nächste Bild in RChart1 laden.

cltom 19. Sep 2007 12:18

Re: Speichern einer Serie von Dateien
 
Zitat:

Zitat von semike
Ich vermute, dass es mit dem Dateinamen Probleme gibt. Es wird der Index i am Ende angehängt. Damit lautet der Dateiname dateiname.bmp1 .. dateiname.bmp10
....

Die Idee ist es, den Dateinamen vorher mit einem Platzhalter für den Index auszustatten.

Hoffe das hilft Dir weiter.

Jup, hat nicht nur geholfen, sondern auch funktioniert! Danke! Hatte ich nicht daran gedacht, obwohl logisch eigentlich.

Danke Dir!

cltom 19. Sep 2007 12:21

Re: Speichern einer Serie von Dateien
 
Zitat:

Zitat von s-off
Ich vermute, dass es mit dem Dateinamen Probleme gibt. Es wird der Index i am Ende angehängt. Damit lautet der Dateiname dateiname.bmp1 .. dateiname.bmp10
Auch wenn Du damit recht hast, ist das nicht die Ursache des Problems. Er hat ja 10 Dateien - nur in allen ist das gleiche Bild enthalten.
dann musst Du natürlich vor dem Aufruf von CopyToBMP auch das nächste Bild in RChart1 laden.

nein, wie oben beschrieben, wurde nur das erste Chart gespeichert und das nur ein mal. Den Inhalt des Charts habe ich natürlich aktualisiert und das geht auch, es hat wirklich daran gelegen, dass der Dateiname so nicht stimmte, weil die Extension ja schon dranhängt.

Danke aber dennoch!!

cltom 19. Sep 2007 12:27

Re: Speichern einer Serie von Dateien
 
P.S. Der Ordnung halber:

Das -1 muss nicht sein, so kommt es an die richtige stelle:

Delphi-Quellcode:
Insert('%d', strFileName, LastDelimiter('.', strFileName));


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz