| Autor |
Beitrag |
Tony-S
      
Beiträge: 184
Erhaltene Danke: 6
Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
|
Verfasst: Mo 22.06.09 22:02
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
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: 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.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Narses
      

Beiträge: 10184
Erhaltene Danke: 1259
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Tony-S 
      
Beiträge: 184
Erhaltene Danke: 6
Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
|
Verfasst: 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
      

Beiträge: 10184
Erhaltene Danke: 1259
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Tony-S 
      
Beiträge: 184
Erhaltene Danke: 6
Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
|
Verfasst: Mo 22.06.09 22:34
Oh, was heißt das denn? Also macht das viel aus ^^?
|
|
jfheins
      
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: 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 
      
Beiträge: 184
Erhaltene Danke: 6
Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
|
Verfasst: 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
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 184
Erhaltene Danke: 6
Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
|
Verfasst: 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
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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 
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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 
      
Beiträge: 184
Erhaltene Danke: 6
Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
|
Verfasst: 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.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: 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 
      
Beiträge: 184
Erhaltene Danke: 6
Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
|
Verfasst: Fr 26.06.09 21:05
Den Dialog hab ich ja 
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Fr 26.06.09 21:06
Tony-S hat folgendes geschrieben : | Den Dialog hab ich ja  |
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 
      
Beiträge: 184
Erhaltene Danke: 6
Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
|
Verfasst: 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  bis jetzt jedenfalls, jop öffnen geht auch.
Vielen dank das ir mir geholfen habt, so hab ich gleich wieder was gelernt  , bisher nahm ich an,
das es reicht einfach die Endung an den Dateinamen zu hängen. Jetzt weiß ichs besser thx.
|
|