Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Bild "richtig" speichern?
Tony-S - Mo 22.06.09 22:02
Titel: Bild "richtig" speichern?
Ich hab denk ich mal ein einfach zu lösendes Problem und zwar möchte ich ein von mir verändertes Bild als jpg speichern.
Das funktioniert soweit auch ganz gut, aber ich kann es leider nur per "öffnen mit" öffnen.
Das hab ich einfach mal so gemacht:
Delphi-Quelltext
1: 2: 3:
| SaveDialog1.Options := [ofOverWritePrompt]; SaveDialog1.Filter:='jpg files (*.jpg)|*.'; IF SaveDialog1.Execute then Image2.Picture.bitmap.SavetoFile(SaveDialog1.FileName); |
- gibt es da irgendeine Option die der Datei ein Standardprogramm zum öffnen zuweist?
Moderiert von
matze: Delphi-Tags hinzugefügtModeriert von
Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mo 22.06.2009 um 22:28
Xentar - Mo 22.06.09 22:16
Du könntest die Endung da eintragen, wo sie hingehört?
Delphi-Quelltext
1:
| SaveDialog1.Filter:='jpg files (*.jpg)|*.jpg'; |
Das (*.jpg) vorher hat keine Auswirkung, da dies nur der Text ist, der in der Auswahlliste erscheint.
Narses - Mo 22.06.09 22:28
Moin!
Tony-S hat folgendes geschrieben : |
Delphi-Quelltext 1:
| IF SaveDialog1.Execute then Image2.Picture.bitmap.SavetoFile(SaveDialog1.FileName); | |
Es sollte mich wundern, wenn dieser Code im Jpeg-Format schreibt... :? Nur .jpg dranschreiben nutzt nix. ;)
cu
Narses
Tony-S - Mo 22.06.09 22:30
hm also das hier geht:
Delphi-Quelltext
1:
| IF SaveDialog1.Execute then Image2.Picture.bitmap.SavetoFile(SaveDialog1.FileName+'.jpg'); |
auch wenn ich das nich gedacht hätte :> muss ich aber noch unterscheiden ob das vorher bmp ico oder jpg war (hab ich so festgelegt).
Moderiert von
Narses: Delphi-Tags hinzugefügt
Narses - Mo 22.06.09 22:32
Moin!
Ich bestreite ja gar nicht, dass dieser Code eine Bilddatei erzeugt - aber eben im WindowsBitmap-Format, und kein Jpeg. :idea:
cu
Narses
Tony-S - Mo 22.06.09 22:34
Oh, was heißt das denn? Also macht das viel aus ^^?
jfheins - Mo 22.06.09 23:39
Das kommt drauf an - du kannst natürlich eine Ferrari-Karrosserie auf einen VW-Bus stecken, und das Teil wird auch noch fahren, aber so richtig toll isses nicht ;)
Speicher die Datei also lieber mit der korrekten Dateiendung (in diesem Fall ".bmp") oder biete mehrere Dateiformate an (jpeg musst du seperat programmieren)
Tony-S - Di 23.06.09 22:16
Hm ich merk glaube was das Problem is, wenn ich jetzt dieses gespeicherte jpeg mit dem Programm öffne dann bekomm ich n jpg Error ;D.
jaenicke - Di 23.06.09 22:23
Naja, nur weil du ein Brot in eine Kiste mit der Aufschrift Tomaten legst, wird es nicht zu Tomaten... ;-)
Und nur weil du eine Bitmap in einer Datei mit der Dateierweiterung .jpg speicherst, wird aus der Bitmap kein Jpeg. ;-)
Dafür musst du die Unit Jpeg einbinden und mit TJpegImage arbeiten.
Tony-S - Fr 26.06.09 13:03
Hmm hmm ok, aber die Unit jpeg einbinden, wie meinst du das, meinst du damit die uses jpeg?
Ich lad nämlich das Bild auf eine Extra Form ohne Image, eben direkt auf die Form, lässt sich das dann immernoch speichern?
elundril - Fr 26.06.09 13:09
Oben in deinem Formular sollte sowas stehen wie uses und danach ne ganze liste von wörtern, alle mit einem beistrich getrennt und einen strichpunkt abgeschlossen. In diese Liste must du JPEG schreiben.
Also, richtig angenommen ;)
Delete - Fr 26.06.09 13:16
Wo die Bitmap dargestellt wird (TImage oder auf der Form oder wo auch immer), ist ja unerheblich, solange sie noch gültig ist (damit meine ich, dass das Objekt noch vorhanden ist). Eine ganz kurze ausbaufähige Variante könnte etwa so aussehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| uses ...,jpeg;
...
var JPG: TJPEGImage; begin if SaveDialog.Execute then begin JPG := TJPEGImage.Create; try JPG.Assign(Bitmap); JPG.SaveToFile(SaveDialog.Filename); finally JPG.Free; end; end; end; |
Getippt und nicht getestet.
Tony-S - Fr 26.06.09 20:58
Danke erstmal für die Hilfe,
ich war jetzt erstmal am probieren ob ich das mit deinem Text so hinbekomm,
das Assign müsst ich ja rein vom Prinzip her auf das "Bild" anwenden, welches ich verändert hab.
Der Restt müsste ja dann klappen, hängt also noch am Assign.
Hm dieses Free löschts wieder ausm Arbeitsspeicher oder? ^^ Wüsst jetzt nich wozu das sonst ist.
Delete - Fr 26.06.09 21:01
Richtig, Free gibt das dynamisch angelegte Objekt wieder frei. Und das Assign musst Du auf Deine Bitmap anwenden (z.B. Image1.Picture.Bitmap).
Yogu - Fr 26.06.09 21:03
Ich will euch ja nicht den Spaß verderben, aber hat jemand von euch schonmal was von
TPicture.SaveToFile gehört? Da kann man sogar angeben, in welches Format gespeichert werden soll.
Anstatt eines
TSaveDialog solltest du einen
TSavePictureDialog verwenden. Dort muss auch rein gar nichts mehr geändert werden. Also so:
Delphi-Quelltext
1: 2:
| SavePictureDialog1.Options := [ofOverWritePrompt]; IF SavePictureDialog1.Execute then Image2.Picture.SavetoFile(SavePictureDialog1.FileName); |
- und fertig ;)
Tony-S - Fr 26.06.09 21:05
Den Dialog hab ich ja :P
Yogu - Fr 26.06.09 21:06
Tony-S hat folgendes geschrieben : |
| Den Dialog hab ich ja :P |
Dann brauchst du erstens den Filter nicht anzupassen, und zweitens solltest du trotzdem
Image2.Picture.SaveToFile verwenden. Dann speichert Delphi automatisch in dem Format, das zur Dateiendung, die Im Dialog angegeben wurde, passt.
Tony-S - Fr 26.06.09 21:08
Ja, aber so richtig klappt das nich :/ , ich probier mal bissl rum.. wenns nich klappt frag ich nochma ^^
---
Moderiert von
Narses: Beiträge zusammengefasst---
image.canvas.draw (0,0,bild);
Hm hier "mal" ich ja mein verändertes Bild auf meine Form (image), also dachte ich, dass ich das JPG.Assign zu eben diesem "Bild" nehmen muss.
Oder denk ich jetzt falsch?
---
Moderiert von
Narses: Beiträge zusammengefasst---
Oh, es geht ja doch :D bis jetzt jedenfalls, jop öffnen geht auch.
Vielen dank das ir mir geholfen habt, so hab ich gleich wieder was gelernt :D, bisher nahm ich an,
das es reicht einfach die Endung an den Dateinamen zu hängen. Jetzt weiß ichs besser thx.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!