![]() |
Exception bei der JPEG Kompremierung
Hallo,
ich wollte mit Delphi 7 mal ausprobieren wie die JPEG Unterstützung ist. Ich möchte eine Grafik laden und bei dieser die Kompremierung ändern und das Ergebnis im Programm (TImage) anzeigen. Dieses funktioniert soweit, bis auf die Kompremierung. Immer, wenn ich xJPEGImage.Compress in den Code Einfüge erhalte ich beim Ausführen die Meldung: ... eine Exception in der Klasse EJPEG ist aufgetreten. Meldung JPEG-Fehler #42 ... Das von mir verwendete Code Fragment ist folgender:
Delphi-Quellcode:
Ich hoffe jemand kann mir helfen
OpenDialog1.Execute;
xJPEGImage.LoadFromFile(OpenDialog1.FileName); xJPEGImage.CompressionQuality:=5; xJPEGImag e.Smoothing:=Not xJPEGImage.Smoothing; xJPEGImage.Compress; image1.Picture.Bitmap.Assign(xJPEGImage); Gruß Sausi [edit=sakura]Delphi-Tags gesetzt. Mfg, sakura[/edit] |
Re: Exception bei der JPEG Kompremierung
hi,
wo kommt xJPEG denn her? erstellst du das zur laufzeit? |
Re: Exception bei der JPEG Kompremierung
Hallo,
ich habe mal die ganze Funktion unten aufgeführt, damit man sieht wo was herkommt. 'image1' ist ein TImage Objekt in einer Form.
Delphi-Quellcode:
[edit=sakura]Delphi-Tags gesetzt. Mfg, sakura[/edit]
procedure TForm1.Button1Click(Sender: TObject);
var xJPEGImage : TJPEGImage; begin xJPEGImage:=TJPEGImage.Create; OpenDialog1.Execute; xJPEGImage.LoadFromFile(OpenDialog1.FileName); xJPEGImage.CompressionQuality:=5; xJPEGImage.Smoothing:=Not xJPEGImage.Smoothing; xJPEGImage.Compress; image1.Picture.Bitmap.Assign(xJPEGImage); xJPEGImage.Free; end; |
Re: Exception bei der JPEG Kompremierung
Hi und herzlich Willkommen in der Delphi-PRAXiS!
Bitte umschließe deine SourceCodes mit den Delphi-Tags ([ delphi][ /delphi] ohne die " "). Dann sieht das ganze ein wenig besser aus. Dein Source solltest du ein wenig umstellen (ich habe die Variable einfach umbenannt, dass meine ich aber nicht):
Delphi-Quellcode:
Des Weiteren solltest du die JPEG-Unit in die Uses aufnehmen.
var
aJPEG: TJPEGImage; begin if OpenDialog1.Execute then begin // wurde der Dialog mit OK bestätigt? aJPEG := TJPEGImage.Create; try // Ressourcen sparen aJPEG.LoadFromFile(OpenDialog1.FileName); aJPEG.Smoothing := true; // Nimm einen eindeutigen Wert! Ich weiß, nicht ob das beim Laden automatisch gesetzt aJPEG.CompressionQuality := 5; aJPEG.Compress; Image1.Picture.Assign(aJPEG); // <-- hier wird der Fehler liegen! Du versuchst einem Bitmap ein JPEG zuzuweisen! Das wird nicht funktionieren! finally aJpeg.Free; end; end; end; Chris |
Re: Exception bei der JPEG Kompremierung
hi,
yo, ich schließe mich da chakotay an. anstelle des
Delphi-Quellcode:
solltest du
image1.Picture.Bitmap.Assign(xJPEGImage)
Delphi-Quellcode:
oder
image1.canvas.draw(0, 0, xJPEGImage)
Delphi-Quellcode:
verwenden.
Image1.Picture.Assign(xJPEGImage)
|
Re: Exception bei der JPEG Kompremierung
Hallo,
vielen Dank für die Anregungen. Ich habe beide Vorschläge von chris ausprobiert.
Delphi-Quellcode:
Erzeugt den gleichen Fehler (hatte ich auch schon ausporbiert)
image1.Picture.Bitmap.Assign(xJPEGImage)
Delphi-Quellcode:
Erzeugt die Fehlermeldung: Ein Bild kann nur geändert werden, wenn es ein Bitmap enthält.
image1.canvas.draw(0, 0, xJPEGImage)
Da ich heute das erste Mal in Delphi etwas Programmiere kann ich mit der zweiten Fehlermeldung nichts anfangen. Der Code ist nicht schön, aber ich wollte erstmal Testen wie schnell man in die Programmierung von Delphi reinkommt und ob Delphi mir vernüftige Sachen an die Hand gibt um JPEGs zu verarbeiten. gruss sausi |
Re: Exception bei der JPEG Kompremierung
Du sollst ja statt
Delphi-Quellcode:
image1.Picture.Bitmap.Assign(xJPEGImage)
Delphi-Quellcode:
verwenden...
image1.Picture.Assign(xJPEGImage)
Chris |
Re: Exception bei der JPEG Kompremierung
hi,
ach, das hab ich nun davon, das ich nicht richtig gelesen habe *g* du willst ja ein JPEG komprimieren, nicht bmp. das was du vorhast geht so nicht, du musst das jpeg erst in ein bmp umwandeln und kannst dann erst wieder ein neues jpeg draus machen. |
Re: Exception bei der JPEG Kompremierung
Hallo,
ich hatte mich da wohl verschrieben. Ich hatte beide Alternativen von chris probiert, mit den schon angesprochenen Ergebnis. Auch die Lösung von chakotay erzeugt den JPEG-Fehler #42. Nun zu der Antowrt von chris: Bei mir ist Quelle und Ziel ein JPEG! Um mein Ziel noch einmal zu verdeutlichen: 1. JPEG laden 2. Der User soll die Kompremierung durch ein Slider einstellen können und online das Ergebnis sehen, ohne das ein temp File erstellt wird. 3. Wenn der User mit den Einstellungen zufrieden ist kann er die JPEG Grafik speichern. Hat jemand ein Beispiel Code mit dem ein JPEG geladen wird und in einer beliebigen Kompremierung angezeigt wird. Gruß Sausi |
Re: Exception bei der JPEG Kompremierung
hi,
wie oben schon gesagt, in etwa so:
Delphi-Quellcode:
bmp := tbitmap.create;
jpg := tjpegimage.create; try jpg.loadfromfile(opendialog1.filename); bmp.assign(jpg); jpg.compressionquality := 50; jpg.assign(bmp); jpg.savetofile('c:\1.jpg'); jpg.loadfromfile('c:\1.jpg'); image1.picture.assign(jpg) finally bmp.free; jpg.free end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 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