AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Exception bei der JPEG Kompremierung
Thema durchsuchen
Ansicht
Themen-Optionen

Exception bei der JPEG Kompremierung

Ein Thema von sausi · begonnen am 10. Aug 2003 · letzter Beitrag vom 10. Aug 2003
Antwort Antwort
sausi

Registriert seit: 10. Aug 2003
4 Beiträge
 
#1

Exception bei der JPEG Kompremierung

  Alt 10. Aug 2003, 15:28
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]
  Mit Zitat antworten Zitat
chris

Registriert seit: 24. Mai 2003
Ort: Düsseldorf
196 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Exception bei der JPEG Kompremierung

  Alt 10. Aug 2003, 17:42
hi,

wo kommt xJPEG denn her? erstellst du das zur laufzeit?
Chris
D2009.4 | Vista SP2 x32
  Mit Zitat antworten Zitat
sausi

Registriert seit: 10. Aug 2003
4 Beiträge
 
#3

Re: Exception bei der JPEG Kompremierung

  Alt 10. Aug 2003, 18:04
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]
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Exception bei der JPEG Kompremierung

  Alt 10. Aug 2003, 18:43
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
  Mit Zitat antworten Zitat
chris

Registriert seit: 24. Mai 2003
Ort: Düsseldorf
196 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Exception bei der JPEG Kompremierung

  Alt 10. Aug 2003, 19:11
hi,

yo, ich schließe mich da chakotay an.

anstelle des

image1.Picture.Bitmap.Assign(xJPEGImage) solltest du

image1.canvas.draw(0, 0, xJPEGImage) oder
Image1.Picture.Assign(xJPEGImage) verwenden.
Chris
D2009.4 | Vista SP2 x32
  Mit Zitat antworten Zitat
sausi

Registriert seit: 10. Aug 2003
4 Beiträge
 
#6

Re: Exception bei der JPEG Kompremierung

  Alt 10. Aug 2003, 19:37
Hallo,
vielen Dank für die Anregungen.
Ich habe beide Vorschläge von chris ausprobiert.
image1.Picture.Bitmap.Assign(xJPEGImage) Erzeugt den gleichen Fehler (hatte ich auch schon ausporbiert)

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
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Exception bei der JPEG Kompremierung

  Alt 10. Aug 2003, 20:05
Du sollst ja statt
image1.Picture.Bitmap.Assign(xJPEGImage) image1.Picture.Assign(xJPEGImage) verwenden...

Chris
  Mit Zitat antworten Zitat
chris

Registriert seit: 24. Mai 2003
Ort: Düsseldorf
196 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Exception bei der JPEG Kompremierung

  Alt 10. Aug 2003, 20:17
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.
Chris
D2009.4 | Vista SP2 x32
  Mit Zitat antworten Zitat
sausi

Registriert seit: 10. Aug 2003
4 Beiträge
 
#9

Re: Exception bei der JPEG Kompremierung

  Alt 10. Aug 2003, 21:14
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
  Mit Zitat antworten Zitat
chris

Registriert seit: 24. Mai 2003
Ort: Düsseldorf
196 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Exception bei der JPEG Kompremierung

  Alt 10. Aug 2003, 23:51
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;
Chris
D2009.4 | Vista SP2 x32
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 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