Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi [gelöst] jpeg aus stream laden (https://www.delphipraxis.net/56212-%5Bgeloest%5D-jpeg-aus-stream-laden.html)

igel457 2. Nov 2005 12:27


[gelöst] jpeg aus stream laden
 
Hi,

ich versuche gerade ein Programm zu schreiben mit dem ich "Materialien" beliebigen Formats in eine Datei schreiben kann.
Das heißt egal ob PNG,BMP,JPG. Mit BMP und PNG funktioniert alles wunderbar.
In die Datei schreiben ist kein Problem.

Nur bei JPG "hängt" sich das Programm auf:
Delphi-Quellcode:
    while temp = '@Material' do
    begin
      material := TMaterial.Create;
      material.picture := TPicture.Create;
      filestream.Read(material.fileext,sizeof(filestring));
      material.fileext := lowercase(material.fileext);
      if (material.fileext = 'jpg') or (material.fileext = 'jpeg') then
      begin
        jpg := TJpegImage.Create;
        jpg.LoadFromStream(filestream); //<--Hier gibt es Probleme
        material.picture.Graphic := jpg;
      end;
      if (material.fileext = 'bmp') then
      begin
        bmp := TBitmap.Create;
        bmp.LoadFromStream(filestream);
        material.picture.Bitmap := bmp;
      end;
      if (material.fileext = 'png') then
      begin
        png := TPNGObject.Create;
        png.LoadFromStream(filestream);
        material.picture.Graphic := png;
      end;    
      material.picture.Graphic := png;
      filestream.Read(temp,sizeof(filestring));
      fmaterials.Add(material);
    end;
Die Sympthome sind:

a) Den ersten Durchlauf gibt es auch mit JPEG keine Probleme.
b) beim zweiten Durchlauf spielt alles irgendwie verrückt. Filstream.Position rückt nicht weiter.

Ich hoffe ihr könnt mir helfen.

Kennt jemand vielleicht eine alternative zum JPEG loader aus der jpeg.pas?

Igel457

marabu 2. Nov 2005 13:11

Re: jpeg aus stream laden
 
Hallo Igel457,

es mag ja sein, dass du einen Fehler an der von dir markierten Stelle beobachtest, die Ursache scheint mir aber eher woanders zu liegen. Ich tippe mal auf das vorhergehende FileStream.Read().

Grüße vom marabu

igel457 2. Nov 2005 13:26

Re: jpeg aus stream laden
 
Nein
daran liegt es nicht.

Ich hab etwas rumprobiert und den Fehler behoben.

Aus irgend einem Grund lädt dieses blöde TJPEG image aus dem Stream, und lädt, und lädt, und lädt. :-D

Da ist mir dann die Idee gekommen die Größe des JPEGs mit in die Datei zu Speichern.

Hier mal der Sourcecode zum Speichern:
Delphi-Quellcode:
      if materials.Items[i].fileext = 'jpg' then
      begin
        ms := TMemoryStream.Create;
        jpg := TJpegImage.Create;
        jpg.Assign(materials.Items[i].picture.Graphic);
        jpg.SaveToStream(ms);
        big := ms.Size;
        ms.Free;
        filestream.Write(big,sizeof(int64)); //<-- Ersteinmal die größe in meinen Stream speichern
        jpg.SaveToStream(filestream);
      end;
Dann einfach Laden:
Delphi-Quellcode:
      if (material.fileext = 'jpg') or (material.fileext = 'jpeg') then
      begin
        filestream.Read(big,sizeof(int64));
        ms := TMemoryStream.Create;
        ms.CopyFrom(filestream,big);
        jpg := TJpegImage.Create;
        ms.Position := 0;
        jpg.LoadFromStream(ms);
        material.picture.Assign(jpg);
        ms.Free;
      end;
Die Lösung ist zwar nicht die Eleganteste, geht aber.

Igel457


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