Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi TImage Speichern (https://www.delphipraxis.net/73025-timage-speichern.html)

Gehstock 11. Jul 2006 07:26


TImage Speichern
 
Ich möchte den Inhalt eines TImages per dialog als *.jpg speichern. Der Dialog klappt schonmal nur weiß er noch nicht was er speichern soll

marabu 11. Jul 2006 07:40

Re: TImage Speichern
 
Guten Morgen.

Über den Dialog ermittelst du nur den gewünschten Speicherort (filename). Du musst die Unit JPeg einbinden, das Bitmap aus der TImage-Komponente per Assign() der JPegImage-Komponente zuweisen und dann kannst du mit der Methode SaveToFile() die JPG-Datei erstellen.

Grüße vom marabu

Gehstock 11. Jul 2006 07:44

Re: TImage Speichern
 
Delphi-Quellcode:
procedure TFormMain.Button27Click(Sender: TObject);
begin
   with SaveDialog do begin
     FilterIndex:=1;
     FileName := IniFile.ReadString('Setup','Screen,+1','Screen.jpg');
     InitialDir := ExtractFilePath(FileName);
     FileName := ExtractFileName(FileName);
     if InitialDir = '' then IniFile.ReadString('Setup','DirOld','.\');
     if not DirectoryExists(InitialDir) then
      InitialDir := IniFile.ReadString('Setup','DirOld','.\');
     DefaultExt := 'jpg';
     Filter := 'Jpg (*.Jpg)|*.Jpg|All files (*.*)|*.*';
     Options:=Options+[ofFileMustExist]-[ofHideReadOnly]
        +[ofNoChangeDir]-[ofNoLongNames]-[ofNoNetworkButton]-[ofHideReadOnly]
        -[ofOldStyleDialog]-[ofOverwritePrompt]+[ofPathMustExist]
        -[ofReadOnly]-[ofShareAware]-[ofShowHelp];
     Title:='Screen Speichern';
   end;//with
  if SaveDialog.Execute then begin
        [color=#009fff]Image1.Create(SaveDialog.FileName,fmCreate);[/color]
         exit;
end;
end;

hab es so erzeugt aber "Incompitable types "TComponent" and "TFilename""

marabu 11. Jul 2006 07:59

Re: TImage Speichern
 
Eher so:

Delphi-Quellcode:
uses
  JPEG;

procedure TFormMain.Button27Click(Sender: TObject);
var
  jpg: TJpegImage;
begin
  with SaveDialog do
  begin
    // ...
    if Execute then
    begin
      jpg := tJpegImage.Create;
      jpg.Assign(Image1.Picture.Bitmap);
      jpg.SaveToFile(FileName);
      jpg.Free;
    end;
  end;
end;
Getippt und nicht getestet.

marabu

TeronG 11. Jul 2006 08:01

Re: TImage Speichern
 
Gibt es das Image1 (sammt Inhalt) schon?

dann sollte das nach "if SaveDialog.Execute then" funtzen
Delphi-Quellcode:

uses
  jpeg,
...

var
  JPGBild : TJPEGImage;
...

  with JPGBild do begin
    JPGBild := TJPEGImage.Create; //JPG erstellen
    Assign(Image1.Picture); //JPG die Bilddaten vom Image übergeben
    SaveToFile(SaveDialog.FileName); // Speichern mit dem Filename vom SaveDialog
    Free; // freigeben ...
  end;
EDIT: ??? Keine rote box?

Gehstock 11. Jul 2006 08:23

Re: TImage Speichern
 
@marabu klappt net
@TeronG genau so

danke euch beiden

TeronG 11. Jul 2006 08:25

Re: TImage Speichern
 
Zitat:

Zitat von Gehstock
@marabu klappt net
@TeronG genau so

danke euch beiden

mag sein .. ich glaub aber nicht, daß dir dein Delphi auch "klappt net" gesagt hat ;-)

naudoc 18. Jun 2007 21:17

Re: TImage Speichern
 
Hallo,
ich habe den obigen Quelltext für mich so verändert:
Delphi-Quellcode:
procedure TForm1.Graphalsjpgspeichern1Click(Sender: TObject);
begin
 with JPGBild do begin
    JPGBild := TJPEGImage.Create; //JPG erstellen
    Assign(Image2); //JPG die Bilddaten vom Image übergeben
    SaveToFile(SaveDialog1.FileName); // Speichern mit dem Filename vom SaveDialog
    Free; // freigeben ...
  end;
end;
Dann kommt beim Klick auf den Button jedoch folgender Fehler:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EConvertError aufgetreten. Meldung: 'TImage kann nicht zu TJPEGImage zugewiesen werden'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------

Was habe ich falsch gemacht?

Hilfe wäre nett...

Danke!

Khabarakh 18. Jun 2007 21:20

Re: TImage Speichern
 
Vergleiche einmal genau deine und TeronGs "Assign"-Zeile.

naudoc 18. Jun 2007 21:30

Re: TImage Speichern
 
Ja, aber dann kommt ne andre Fehlermeldung..
und: gibt das picture auch die selbst(über canvas) gemalten Dinge ab?

DAnke!


EDIT:

Hier der Fehler:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EConvertError aufgetreten. Meldung: 'TPicture kann nicht zu TJPEGImage zugewiesen werden'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------

Danke nochmal!

mfG

naudoc 19. Jun 2007 21:20

Re: TImage Speichern
 
Kann mir hier keiner Helfen?

Wär echt net, ist doch warscheinlich keine große Sache...

mfG

ManuMF 19. Jun 2007 21:35

Re: TImage Speichern
 
1. Das waren keine 24 Stunden ;-)
2. Warum fragst du denn? Die Lösung hat dir Khabarakh doch schon geschrieben.

naudoc 19. Jun 2007 22:36

Re: TImage Speichern
 
Und ich habe geantwortet, dass sein Tipp auch keine Lösung bringt...

mfG

bitsetter 19. Jun 2007 22:39

Re: TImage Speichern
 
Hi,

versuche es mal damit:
Delphi-Quellcode:
 
...
  with JPGBild do begin
    JPGBild := TJPEGImage.Create;
    Assign(Image2.Picture.Graphic);
...

ManuMF 19. Jun 2007 23:12

Re: TImage Speichern
 
Zitat:

Zitat von naudoc
Und ich habe geantwortet, dass sein Tipp auch keine Lösung bringt...

Sorry, habe die Meldung falsch gelesen...

Mit Image.Picture.Bitmap sollte es übrigens auch klappen.

naudoc 21. Jun 2007 20:46

Re: TImage Speichern
 
Das *.graphic funktioniert... !

DANKE, DANKE, DANKE!!! :thumb: :hello: :hello:

mfG


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:52 Uhr.

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