Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Jpg, Vorschau, TImage, Kompressionsrate (https://www.delphipraxis.net/123367-jpg-vorschau-timage-kompressionsrate.html)

isilive 31. Okt 2008 16:53


Jpg, Vorschau, TImage, Kompressionsrate
 
Hallo Leute,

ich wandle ein bmp in ein jpg um:

Delphi-Quellcode:
jpg2.CompressionQuality:=quali;
jpg2.assign(bmp2);
Wenn ich jetzt bei 'jpg2' eine sehr schlechte/kleine Compression Quality einstelle, wird es erwartungsgemäss eine sehr kleine Datei mit schlechter Bildqualität wenn ich es auf die Platte speichere.

Später male das JPG in ein TImage:

Delphi-Quellcode:
bmp2.Canvas.StretchDraw(Rect(0,0,Breite2,Hoehe2),jpg2);
form2.ImageBild.picture.bitmap.assign(bmp2);
Ich möchte das TImage 'ImageBild' als Vorschau für die JPG Qualität nutzen. Hier ist die Bildqualität aber immer super! Auch wenn das auf HDD gespeicherte Bild sehr 'schlecht aussieht'!

Wo liegt der Fehler und wie kann ich das lösen?

Danke, Stefan

Dunkel 31. Okt 2008 17:03

Re: Jpg, Vorschau, TImage, Kompressionsrate
 
Hallo!

Kann es sein, dass die Qualitätseinstellung von TJPEG erst beim Speichern Wirkung zeigt, beim "Assignen" noch nicht greifen und entsprechend noch die unkomprimierten Daten im Speicher liegen? Quick and Dirty: speichern und neu laden, dann sollte es funktionieren.

littleDave 31. Okt 2008 17:16

Re: Jpg, Vorschau, TImage, Kompressionsrate
 
oder einfach

Delphi-Quellcode:
jpg2.CompressionQuality:=quali;
jpg2.assign(bmp2);
jpg2.Compress;

isilive 1. Nov 2008 03:50

Re: Jpg, Vorschau, TImage, Kompressionsrate
 
Zitat:

Zitat von littleDave
Delphi-Quellcode:
jpg2.CompressionQuality:=quali;
jpg2.assign(bmp2);
jpg2.Compress;

Funzt leider auch nicht. Hab die quali definitiv <10 und das Bild ist nach 'compress' und
Delphi-Quellcode:
form2.ImageBild.Canvas.StretchDraw(Rect(0,0,Breite2,Hoehe2),jpg2);
immer noch in bester Qualität. :?

Dann hab ich versucht es in einen Memorystream zu speichern und danach wieder zu laden:

Delphi-Quellcode:
var: stream1:tmemorystream;
begin
  jpg2.Savetostream(stream1);
  jpg2.LoadFromStream(stream1);
das Speichern funktioniert problemlos aber das Laden bringt mir immer:
'Im Projekt ist eine Exception der Klasse EJPEG mit der Meldung JPEG-Fehler #43 aufgetreten.'

Ist es mit einem Stream möglich? Wie kann ich es sonst lösen?

Die Muhkuh 1. Nov 2008 10:13

Re: Jpg, Vorschau, TImage, Kompressionsrate
 
Nach dem Speichern die Position des Streams auf 0 setzen und erst dann laden.

roga 1. Nov 2008 19:35

Re: Jpg, Vorschau, TImage, Kompressionsrate
 
Hallo,

so müsste es klappen:

Delphi-Quellcode:
  jpg.CompressionQuality := quali;
  jpg.Compress;
  jpg.Smoothing := not jpg.Smoothing;
  ImagePreview.Picture.Assign(jpg);
Gruß RoGa

isilive 2. Nov 2008 22:20

Re: Jpg, Vorschau, TImage, Kompressionsrate
 
Mit 'jpg.smoothing' funktioniert es. Danke!!!! Wer kann aber auch ahnen, dass compress alleine noch zuwenig ist. :stupid:

Die andere Möglichkeit:
Delphi-Quellcode:
jpg2.Savetostream(stream1);
Stream1.Position := 0;
jpg2.LoadFromStream(stream1);
funktionierte mit der normalen 'uses: Jpeg' nicht. 'JPG-Fehler #43' trotz '.Position:=0'.
Erst als ich die GraphicEx eingebunden habe funktionierte es, kann das jemand nachvollziehen?

Danke auf jeden Fall, beide Möglichkeiten funktionieren jetzt perfekt! :cheers:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:28 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