Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Exception bei der JPEG Kompremierung (https://www.delphipraxis.net/7363-exception-bei-der-jpeg-kompremierung.html)

sausi 10. Aug 2003 15:28


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:
      OpenDialog1.Execute;
      xJPEGImage.LoadFromFile(OpenDialog1.FileName);
      xJPEGImage.CompressionQuality:=5;
      xJPEGImag e.Smoothing:=Not xJPEGImage.Smoothing;
      xJPEGImage.Compress;
      image1.Picture.Bitmap.Assign(xJPEGImage);
Ich hoffe jemand kann mir helfen

Gruß
Sausi

[edit=sakura]Delphi-Tags gesetzt. Mfg, sakura[/edit]

chris 10. Aug 2003 17:42

Re: Exception bei der JPEG Kompremierung
 
hi,

wo kommt xJPEG denn her? erstellst du das zur laufzeit?

sausi 10. Aug 2003 18:04

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:
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;
[edit=sakura]Delphi-Tags gesetzt. Mfg, sakura[/edit]

CalganX 10. Aug 2003 18:43

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:
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;
Des Weiteren solltest du die JPEG-Unit in die Uses aufnehmen.

Chris

chris 10. Aug 2003 19:11

Re: Exception bei der JPEG Kompremierung
 
hi,

yo, ich schließe mich da chakotay an.

anstelle des

Delphi-Quellcode:
image1.Picture.Bitmap.Assign(xJPEGImage)
solltest du

Delphi-Quellcode:
image1.canvas.draw(0, 0, xJPEGImage)
oder
Delphi-Quellcode:
Image1.Picture.Assign(xJPEGImage)
verwenden.

sausi 10. Aug 2003 19:37

Re: Exception bei der JPEG Kompremierung
 
Hallo,
vielen Dank für die Anregungen.
Ich habe beide Vorschläge von chris ausprobiert.
Delphi-Quellcode:
image1.Picture.Bitmap.Assign(xJPEGImage)
Erzeugt den gleichen Fehler (hatte ich auch schon ausporbiert)

Delphi-Quellcode:
image1.canvas.draw(0, 0, xJPEGImage)
Erzeugt die Fehlermeldung: Ein Bild kann nur geändert werden, wenn es ein Bitmap enthält.

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

CalganX 10. Aug 2003 20:05

Re: Exception bei der JPEG Kompremierung
 
Du sollst ja statt
Delphi-Quellcode:
image1.Picture.Bitmap.Assign(xJPEGImage)
Delphi-Quellcode:
image1.Picture.Assign(xJPEGImage)
verwenden...

Chris

chris 10. Aug 2003 20:17

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.

sausi 10. Aug 2003 21:14

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

chris 10. Aug 2003 23:51

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 12:10 Uhr.

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