Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - JPEG komprimieren
Arbengie - Mo 17.10.11 11:36
Titel: JPEG komprimieren
Hi, ich bins wieder :)
diesmal habe ich folgendes Problem.
Ich lade ein jpeg Bild, will das dann komprimieren und dann auf em Desktop speichern.
Das Bild wird auch auf dem Desktop erstellt, nur wenn man das Bild öffnet, wird angezeigt "Beim Öffnen des Bildes ist ein Fehler aufgetreten", d.h. ich mache wohl irgendwas falsch, nur weiß ich nicht was...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TfrmMain.btnGoClick(Sender: TObject); var i: integer; jpeg: TJpegImage; name: string; begin name := edtName.Text; jpeg := TJpegImage.Create; for i := 0 to dlgOpen.Files.Count - 1 do begin jpeg.loadfromfile(picList[i]); jpeg.CompressionQuality := barQuality.Position; jpeg.Compress; jpeg.SaveToFile(savePfad + '\' + name + inttostr(i) + '.jpg'); end; jpeg.free; end; |
chrisw - Mo 17.10.11 12:37
So sollte es funktionieren !
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure TfrmMain.btnGoClick(Sender: TObject); var i: integer; jpeg: TJpegImage; name: string; tempBMP : TBitMap; begin name := edtName.Text; jpeg := TJpegImage.Create; tempBMP := TBitMap.Create; for i := 0 to dlgOpen.Files.Count - 1 do begin jpeg.loadfromfile(picList[i]); tempBMP.Assign(jpeg); jpeg.CompressionQuality := barQuality.Position; jpeg.Compress; jpeg.SaveToFile(savePfad + '\' + name + inttostr(i) + '.jpg'); end; jpeg.free; tempBMP.free; end; |
Arbengie - Mo 17.10.11 13:11
Jetzt kommt ein Runtime Error!
Moderiert von
Narses: Bild als Anhang hochgeladen.
chrisw - Mo 17.10.11 13:19
Da tippe ich mal auf "TBitMap.Create" vergessen (wegen der 0000)
Arbengie - Mo 17.10.11 13:40
Ah danke, jetzt klappts ;).
Nur eine Sache verstehe ich nicht mit dem Bitmap.
Wir createn ein Bitmap und was genau macht assign()?
Laut meinen Englischkenntnissen müsste es sowas wie "zuweisen" sein.
Wir erstellen das Bitmap, weisen es dem Jpeg zu, aber sonst passiert doch damit gar nichts?
Das verstehe ich nicht ganz.
MfG
chrisw - Di 18.10.11 06:32
Für Alle, die es in Zukunft nutzen !
Es geht auch mit dem direkten Aufruf von DIBNeeded:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TfrmMain.btnGoClick(Sender: TObject); var i: integer; jpeg: TJpegImage; name: string; begin name := edtName.Text; jpeg := TJpegImage.Create; for i := 0 to dlgOpen.Files.Count - 1 do begin jpeg.loadfromfile(picList[i]); jpeg.DIBNeeded; jpeg.CompressionQuality := barQuality.Position; jpeg.Compress; jpeg.SaveToFile(savePfad + '\' + name + inttostr(i) + '.jpg'); end; jpeg.free; end; |
Christian
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!